Regex环视(?![\ + \。])

问题描述 投票:0回答:1
pattern = r'\b[Cc]\b(?![\+\.])

[我正在尝试查找Cc后面没有+,还包括位于字符串末尾的实例。

在线课程的答案正则表达式如下;

pattern = r'\b[Cc]\b(?![\+\.])

但是我不明白为什么它不能像这样;

pattern = r'\b[Cc](?!+.)

谁能解释为什么?

非常感谢您能启发我!

python regex
1个回答
0
投票

您的原始正则表达式可以简化为\b[Cc]\b(?!\+),即:

  • 负前瞻应仅包含(转义的)+
  • 因此不需要括号。

[当您在xxx c- c# c! c+ ac ca xxx c上尝试上述正则表达式时:

  • [C3]的前3个匹配项匹配,例如:
    • 在它们之前有单词边界,
    • 在它们之后还有一个单词边界(“-”,“#”和“!”是不是单词字符),
    • 在它们之后没有“ +”(由负向超前禁止),
  • 第四次出现(c)不匹配(超前失败),
  • 第五次出现(c+)不匹配(“ c”之前没有单词边界,]]
  • 第六次出现(ac)不匹配(“ c”之后没有单词边界,]]
  • 第七次出现(终端ca)已匹配(之前的单词边界,之后的字词边界,之后没有c
  • 现在,让我们看看您的第二个正则表达式,在-之后也没有点,但是此+必须转义:+

    • 它在前面也包含单词边界(\b[Cc](?!\+)),
  • 但是现在必须在其后加上单词边界,
  • 像以前一样负面否定。
  • 这次我的测试字符串中第六次出现\b也匹配,因为第二个模式在c之后不需要任何单词边界。

    因此,总结,是否需要c后的单词边界取决于您。实际上,您写了c,因此,“ c”之后的单词边界没有要求。

我建议您在instances with "C" or "c" not followed by "+"使用在线正则表达式测试器,因为它包含有关尝试过的模式的很好的解释。

© www.soinside.com 2019 - 2024. All rights reserved.