2012-05-07 8 views
0

パターンの文字列があります{{開始日| 2005 | 8 | 29}} 今私は2005,8,99を3つの別個の要素として抽出したいと思います。 私はregexpを使用しました:re.findall( '([0-9])+'、str) これは2005,8,9の代わりに私に5,8,9を与えています 検索方法を試したときに同じパターンを使用していますre.search( '([0-9])+'、str).group() 私は2005年の最初の要素を得ました。 なぜこれら2つのメソッドの出力に違いがありますか?いつ私の現在の日付パターンの正規表現にする必要がありますか?正規表現パターンfindallと同じ理由で別の理由を与える検索

答えて

1

短いストーリー:'([0-9]+)'を意味し、'([0-9])+'ではありません。

詳細:すべてのペアのペアがグループを決定します。一致する単一の試行でグループが複数回キャプチャされた場合、最後のキャプチャだけが報告されます。あなたは、文字列に対して、この再呼び出したとき([0-9])部分は、その後、その後、その後、'5''0''0''2'に一致したので、それはもはや一致しませんでした前に、特に

は、それは、最初に行くラウンドに"2005"のすべてを一致しました。したがって、それは"2005"のすべてにマッチしましたが、グループ自体は、そのサブ表現の最終一致を報告しただけです:'5'

比較すると、後でグループメソッドでre.searchを試しました。 groupメソッドは、と一致する部分文字列を返します。not the first groupの正規表現全体を返します。それで、それは"2005"のすべてを返しました。代わりに.group(1)に電話してみてください。