89
>>> match = re.findall(r'\w\w', 'hello')
>>> print match
['he', 'll']

\w\w は 2 文字を意味するため、'he' と 'll' が必要です。しかし、'el' と 'lo'が正規表現と一致しないのはなぜですか?

>>> match1 = re.findall(r'el', 'hello')
>>> print match1
['el']
>>>
4

4 に答える 4

132

findallデフォルトでは、重複する一致は生成されません。ただし、この式は次のことを行います。

>>> re.findall(r'(?=(\w\w))', 'hello')
['he', 'el', 'll', 'lo']

先読みアサーション(?=...)は次のとおりです。

(?=...)次に一致する場合...に一致しますが、文字列を消費しません。これは、先読みアサーションと呼ばれます。たとえば、 が後に続く場合にのみIsaac (?=Asimov)一致します。'Isaac ''Asimov'

于 2012-07-11T10:44:05.500 に答える
46

重複一致をサポートする新しい Python 正規表現モジュールを使用できます。

>>> import regex as re
>>> match = re.findall(r'\w\w', 'hello', overlapped=True)
>>> print match
['he', 'el', 'll', 'lo']
于 2013-09-23T18:54:12.637 に答える