Python正则表达式捕获组不适用于简单表达式

时间:2015-04-03 00:03:20

标签: python regex python-2.7

我想为一对连续的单词获得2个被捕获的组。我使用这个正则表达式:

r'\b(hello)\b(world)\b'

但是,使用此正则表达式搜索“hello world”不会产生任何结果:

regex = re.compile(r'\b(hello)\b(world)\b')
m =  regex.match('hello world') # m evaluates to None.

1 个答案:

答案 0 :(得分:3)

您需要在单词之间留出空格:

>>> import re
>>> regex = re.compile(r'\b(hello)\s*\b(world)\b')
>>> regex.match('hello world')
<_sre.SRE_Match object at 0x7f6fcc249140>
>>> 

讨论

正则表达式\b(hello)\b(world)\b要求单词hello正好在单词world开始的位置结束,但在它们之间使用单词分隔\b。这不可能发生。在它们之间添加\s空间可以解决这个问题。

如果您打算在helloworld之间允许使用标点符号或其他分隔符,那么应该将这种可能性添加到正则表达式中。