1. ホーム
  2. python

[解決済み] 正規表現で重複するマッチを見つけるには?

2022-02-12 22:07:55

質問

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

ということは、'he'と'll'は2文字ということになりますね。しかし、なぜ'el'と'lo'なのでしょうか? ではなく は正規表現にマッチするのでしょうか?

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

解決方法は?

findall は、デフォルトでは重複するマッチを生成しません。しかし、この式ではそうなります。

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

ここで (?=...) ルックアヘッドアサーション :

(?=...) が一致する場合 ... は次にマッチするが、その後に続く 文字列を使用します。これはルックアヘッドアサーションと呼ばれます。例えば Isaac (?=Asimov) にマッチします。 'Isaac ' が続く場合のみです。 'Asimov' .