正则表达式匹配之间的字符串列表

时间:2012-11-27 09:59:26

标签: python regex

如何在正则表达式模式之间找到所有字符串? 例如,

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

我想找到:

[' asd 12 ', ' sfd g ']

4 个答案:

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