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 ']

尽管在 Python 3 上您需要使用list(filter(None, reg.split(s))),或迭代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 回答