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

时间:2016-06-17 15:10:20

标签: python regex

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

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

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

我唯一能想到的就是这个,但它看起来并不漂亮:

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

1 个答案:

答案 0 :(得分:5)

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

>>> 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任何位置。