Python re:如果字符串有一个单词和单词列表中的任何一个?



我想使用正则表达式查找字符串是否与此规则匹配:

list_of_words = ['a', 'boo', 'blah']
if 'foo' in temp_string and any(word in temp_string for word in list_of_words)

我希望它在正则表达式中的原因是我有数百个类似的规则并且与它不同,所以我想将它们全部保存为字典中的模式。

我唯一能想到的就是这个,但它似乎并不漂亮:

re.search(r'foo.*(a|boo|blah)|(a|boo|blah).*foo')

您可以使用|连接数组元素来构造一个前瞻断言正则表达式:

>>> list_of_words = ['a', 'boo', 'blah']
>>> reg = re.compile( r'^(?=.*b(?:' + "|".join(list_of_words) + r')b).*foo' )
>>> print reg.pattern
^(?=.*b(?:a|boo|blah)b).*foo
>>> reg.findall(r'abcd foo blah')
['abcd foo']

如您所见,我们已经构建了一个正则表达式^(?=.*b(?:a|boo|blah)b).*foo它断言list_of_words中的一个单词的存在,并在任何地方匹配foo

最新更新