0

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

4

1 に答える 1

1

簡単に言えば、あなたは'([0-9]+)'ではなくを意味してい'([0-9])+'ました。

詳細: 括弧のすべてのペアがグループを決定します。1 回の照合でグループが複数回キャプチャされた場合、最後のキャプチャのみが報告されます。

特に、文字列に対してこの re を呼び出すと、部分が 、 then 、 then 、 then に一致したため、最初のラウンドですべて一致しましたが、"2005"それ以上一致できなくなりました。したがって、 のすべてに一致しましたが、グループ自体はその部分式の最後の一致のみを報告しました: 。([0-9])'2''0''0''5'"2005"'5'

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

于 2012-05-07T03:44:54.507 に答える