2009-05-14 39 views
2

Python Challengeの問題を解決するためにregexを使用しているうちに、私は混乱した動作を経験しました。 hereからキャプチャグループはどのように機能しますか? (wrt pythonの正規表現)

は(...)正規表現が括弧の内側にあるものは何でもマッチします。

'+' 得られたRE先行REの1回以上の繰り返しに一致させます。

だから、これは理にかなって:

>>>import re 
>>>re.findall(r"(\d+)", "1111112") 
['1111112'] 

しかし、これはしていません:

>>> re.findall(r"(\d)+", "1111112") 
['2'] 

私はグループが正規表現に存在しているときのfindAllはグループのみを返しますが、なぜ唯一の "であることを実感2 'が返されましたか?試合のすべての1に何が起こったのですか?

答えて

10

キャプチャグループは1つしかないが、繰り返し実行されるため、新しいマッチはそのグループの「ストレージスペース」に繰り返し入力されます。言い換えれば、1は、その後に「」によって「上書き」され、最終的に2によって失われました。

+2

グループ化されていないかっこもあります。try r "(?:\ d)+"です。 –

1

')'の後に '+'を追加して繰り返します。実装の詳細はわかりませんが、7回一致して最後の一致のみを返します。

最初は、7桁の数字をマッチングしてグループにします。

関連する問題