1

正規表現パターン間のすべての文字列を見つけるにはどうすればよいですか?例えば、

>>> s="123 asd 12 456 sfd g 789"
>>> reg=re.compile("\d{3}")
>>> reg.findall(s)
['123', '456', '789']

私が見つけたい:

[' asd 12 ', ' sfd g ']
4

4 に答える 4

6

の代わりに.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()

于 2012-11-27T10:00:51.127 に答える
1

re.splitの代わりに使用してくださいre.findall

于 2012-11-27T10:00:39.113 に答える
1

次のようなことを試すことができます:

>>> reg = re.compile(r'(?:\d{3})?(.*?)\d{3}')
>>> reg.findall("123 asd 12 456 sfd g 789")
[' asd 12 ', ' sfd g ']

.findall()重複する一致は見つからないため、最初の番号のグループをオプションの一致として指定する必要があります。結局のところ、より堅牢なソリューションを得るには、正規表現だけの場合とは異なるアプローチを取る方がよい場合があります。

于 2012-11-27T10:06:32.850 に答える
0
>>> s = "123 asd 12 456 sfd g 789"
>>> filter(None, re.compile("\d{3}").split(s))
[' asd 12 ', ' sfd g ']
于 2012-11-27T10:41:14.213 に答える