如何查找正则表达式模式之间的所有字符串? 例如,正则表达式匹配之间的字符串列表
>>> s="123 asd 12 456 sfd g 789"
>>> reg=re.compile("\d{3}")
>>> reg.findall(s)
['123', '456', '789']
我想找到:
[' asd 12 ', ' sfd g ']
如何查找正则表达式模式之间的所有字符串? 例如,正则表达式匹配之间的字符串列表
>>> s="123 asd 12 456 sfd g 789"
>>> reg=re.compile("\d{3}")
>>> reg.findall(s)
['123', '456', '789']
我想找到:
[' asd 12 ', ' sfd g ']
使用:
>>> 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
。的.findall()
.split()
method代替
你可以尝试这样的:
>>> 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 ']
巧妙地使用'.split()'。 – jszakmeister