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

发布于 2021-01-29 19:36:58

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

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

关注者
0
被浏览
61
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    请参阅此正则表达式:

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


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看