正規表現パターン間のすべての文字列を見つけるにはどうすればよいですか?例えば、
>>> s="123 asd 12 456 sfd g 789"
>>> reg=re.compile("\d{3}")
>>> reg.findall(s)
['123', '456', '789']
私が見つけたい:
[' asd 12 ', ' sfd g ']
の代わりに.split()
メソッドを使用してください.findall()
:
>>> reg.split(s)
['', ' asd 12 ', ' sfd g ', '']
これには、開始と終了の空の文字列を含む、一致間のすべての結果が含まれます。それらを除外することができます:
>>> filter(None, reg.split(s))
[' asd 12 ', ' sfd g ']
list(filter(None, reg.split(s)))
ただし、Python 3では、を使用するか、の結果を反復処理する必要がありますfilter()
。
re.split
の代わりに使用してくださいre.findall
。
次のようなことを試すことができます:
>>> reg = re.compile(r'(?:\d{3})?(.*?)\d{3}')
>>> reg.findall("123 asd 12 456 sfd g 789")
[' asd 12 ', ' sfd g ']
.findall()
重複する一致は見つからないため、最初の番号のグループをオプションの一致として指定する必要があります。結局のところ、より堅牢なソリューションを得るには、正規表現だけの場合とは異なるアプローチを取る方がよい場合があります。
>>> s = "123 asd 12 456 sfd g 789"
>>> filter(None, re.compile("\d{3}").split(s))
[' asd 12 ', ' sfd g ']