完全符合单词

时间:2015-03-14 20:37:13

标签: python regex

如果一个句子包含我要查找的单词之一,我想使用匹配的正则表达式。

现在所有这些都匹配,这是不正确的。我用了#34; "对于words中的所有单词(例如" seven "),但这次如果单词位于字符串的末尾则不匹配。

words = ('seven', 'eight')
regex = re.compile('|'.join(words))
print regex.search('aaaaaasd seven asdfadsf')   #1 - should match
print regex.search('AAAsevenAAA')               #2 - shouldn't match
print regex.search('AAA eightaaa')              #3 - shouldn't match
print regex.search('eight aaa')                 #4 - should match
print regex.search('aaaa eight')                #5 - should match

如果匹配的单词是其中一个单词,那么如何使我的正则表达式不匹配? substring(如上面的#2和#3)?

1 个答案:

答案 0 :(得分:1)

正如@CasimiretHippolyte指出你要添加word boundaries。如果您不想为列表中的每个单词手动执行此操作,则需要修改已编译的正则表达式。

regex = re.compile(r'\b(?:%s)\b' % '|'.join(words))

注意:如果你的正则表达式中有转义序列,最好使用原始字符串表示法。通过使用非捕获(?:...)组,这允许您的单词与围绕它们的单词边界分组,否则它会在开头和结尾放置边界。

Ideone Demo