代码之家  ›  专栏  ›  技术社区  ›  mon

regexp多重前瞻行为的解释

  •  0
  • mon  · 技术社区  · 2 年前

    请帮助理解原因 r'\b\w+(?=\d)(?=[A-Z])' 不匹配 Python 3A

    上面写着 r'\b\w+(?=\d)(?=[A-Z])' 搜索单词,后面跟着一个数字,然后是一个大写字母。 Python 3A 由一个单词组成 Python 后面跟一个数字 3 和一个大写字母 A 。如果语句正确,则应匹配 蟒蛇

    Multiple Positive Lookaheads enter image description here

    1 回复  |  直到 2 年前
        1
  •  1
  •   Nick SamSmith1986    2 年前

    它不匹配,因为在同一个地方有两个lookahead,其中一个断言数字,另一个断言大写字母。由于它们之间没有重叠,其中一个不可能是真的,因此比赛失败了。你只需要一个数字后跟大写字母的前瞻:

    \b\w+(?=\d[A-Z])
    

    Regex演示 regex101