如果一个句子包含我要查找的单词之一,我想使用匹配的正则表达式。
现在所有这些都匹配,这是不正确的。我用了#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)?
答案 0 :(得分:1)
正如@CasimiretHippolyte指出你要添加word boundaries。如果您不想为列表中的每个单词手动执行此操作,则需要修改已编译的正则表达式。
regex = re.compile(r'\b(?:%s)\b' % '|'.join(words))
注意:如果你的正则表达式中有转义序列,最好使用原始字符串表示法。通过使用非捕获(?:...)
组,这允许您的单词与围绕它们的单词边界分组,否则它会在开头和结尾放置边界。