如何在正则表达式模式之间找到所有字符串? 例如,
>>> s="123 asd 12 456 sfd g 789"
>>> reg=re.compile("\d{3}")
>>> reg.findall(s)
['123', '456', '789']
我想找到:
[' asd 12 ', ' sfd g ']
答案 0 :(得分:6)
使用.split()
method代替.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()
的结果。
答案 1 :(得分:1)
使用re.split
代替re.findall
。
答案 2 :(得分:1)
您可以尝试以下方式:
>>> reg = re.compile(r'(?:\d{3})?(.*?)\d{3}')
>>> reg.findall("123 asd 12 456 sfd g 789")
[' asd 12 ', ' sfd g ']
由于.findall()
找不到重叠匹配,因此您需要将第一组数字指定为可选匹配。最后,采用与正则表达式不同的方法来获得更强大的解决方案可能会更好。
答案 3 :(得分:0)
>>> s = "123 asd 12 456 sfd g 789"
>>> filter(None, re.compile("\d{3}").split(s))
[' asd 12 ', ' sfd g ']