正则表达式中存在一些顺序无关紧要的单词
我想编写一个正则表达式来搜索某些单词的存在,但是它们的出现顺序无关紧要。
例如,搜索“ Tim”和“
stupid”。我的正则表达式是Tim.*stupid|stupid.*Tim
。但是是否可以编写一个更简单的正则表达式(例如,使两个单词在正则表达式本身中仅出现一次)?
-
请参阅此正则表达式:
/^(?=.*Tim)(?=.*stupid).+/
正则表达式说明:
^
在字符串开头声明位置。(?=.*Tim)
断言字符串中存在“ Tim”。(?=.*stupid)
断言字符串中存在“愚蠢”。.+
现在我们的短语已存在,此字符串有效。继续并使用.+
或-.++
匹配整个字符串。
要更专门地使用先行,您可以添加另一个
(?=.*<to_assert>)
组。整个正则表达式可以简化为/^(?=.*Tim).*stupid/
。观看正则表达式演示!
>>> import re >>> str =""" ... Tim is so stupid. ... stupid Tim! ... Tim foobar barfoo. ... Where is Tim?""" >>> m = re.findall(r'^(?=.*Tim)(?=.*stupid).+$', str, re.MULTILINE) >>> m ['Tim is so stupid.', 'stupid Tim!'] >>> m = re.findall(r'^(?=.*Tim).*stupid', str, re.MULTILINE) >>> m ['Tim is so stupid.', 'stupid Tim!']