小编典典

正则表达式中存在一些顺序无关紧要的单词

python

我想编写一个正则表达式来搜索某些单词的存在,但是它们的出现顺序无关紧要。

例如,搜索“ Tim”和“
stupid”。我的正则表达式是Tim.*stupid|stupid.*Tim。但是是否可以编写一个更简单的正则表达式(例如,使两个单词在正则表达式本身中仅出现一次)?


阅读 216

收藏
2020-12-20

共1个答案

小编典典

请参阅此正则表达式:

/^(?=.*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!']
2020-12-20