2012-11-27 160 views

回答

6

使用:

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

巧妙地使用'.split()'。 – jszakmeister

1

你可以尝试这样的:

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

由于.findall()不会找到重叠的匹配,你需要指定号码的第一组作为一个可选的比赛。最后,采用与正则表达式不同的方法可能会更好,因为这是一个更强大的解决方案。

+0

谢谢!我认为这是split()更优雅,更明确,认为。 –

+0

我绝对同意! – jszakmeister

+0

+1原始答案和作为一项运动。 –

0
>>> s = "123 asd 12 456 sfd g 789" 
>>> filter(None, re.compile("\d{3}").split(s)) 
[' asd 12 ', ' sfd g '] 
相关问题