如何找到正则表达式模式之间的所有字符串?例如,
>>> 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 ']
尽管在 Python 3 上您需要使用list(filter(None, reg.split(s)))
,或迭代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 ']