首页 > 解决方案 > 不应该匹配时的负前瞻匹配

问题描述

我制作了这个正则表达式来匹配正在读取的 var

\bvar\b([^;^{]*?([\s]*?([<]|[>]|[!]|[=]{2})))([^;]*?)(?!=)

这些是我的测试字符串:

var->var1 = blah;     //must not match -but matches
var = 8;              //as expected - do not match          
if(var >= 9)          //as expected - matches
if(var ->var1 == balh) //as expected - matches

这里

([<]|[>]|[!]|[=]{2})检查是否存在 >、<、! 或 ==)

我的问题是当 var 被读取而不是被写入时它应该匹配(不需要得到结果)。但是当 var->出现在我的测试字符串中时,由于我的正则表达式,它会自动匹配[>] 。我尝试了负前瞻([^;]*?)(?!=) 。但这对我原来的正则表达式没有任何作用。

标签: pythonpython-3.xregexregex-lookarounds

解决方案


您可以使用修复当前表达式

\bvar\b(?!->)(?=[^;^{]*(?:[<>!]|==))

请参阅正则表达式演示

详情

  • \bvar\b - 一个完整的词var
  • (?!->)-->不允许紧跟当前位置的右侧
  • (?=[^;^{]*(?:[<>!]|==))- 在当前位置的右侧,必须有任何零个或多个字符,除了;,^{, 然后<是 , >, !, or ==

推荐阅读