python - 不应该匹配时的负前瞻匹配
问题描述
我制作了这个正则表达式来匹配正在读取的 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->
出现在我的测试字符串中时,由于我的正则表达式,它会自动匹配[>]
。我尝试了负前瞻([^;]*?)(?!=)
。但这对我原来的正则表达式没有任何作用。
解决方案
您可以使用修复当前表达式
\bvar\b(?!->)(?=[^;^{]*(?:[<>!]|==))
请参阅正则表达式演示。
详情:
\bvar\b
- 一个完整的词var
(?!->)
-->
不允许紧跟当前位置的右侧(?=[^;^{]*(?:[<>!]|==))
- 在当前位置的右侧,必须有任何零个或多个字符,除了;
,^
和{
, 然后<
是 ,>
,!
, or==
。
推荐阅读
- javascript - 滚动到特定 div 底部后如何触发 javascript 函数?
- python - 字典中单词对集的余弦相似度平均值 (Word2Vec)
- amazon-web-services - 在同一个 aws_s3_bucket 资源上执行 `terraform apply` 两次有不同的结果
- c++ - 为什么三元运算符返回0?
- python - 在动态内容(多页)上使用 Selenium 抓取 - Python
- java - 使用 Java Spring Boot MongoDB 在日期之间获取数据时出现问题
- c - 返回类型为 int 的函数的递增/递减运算符
- vector - 输入-1后在VSCode中冻结输出屏幕
- docker - 为什么要使用 -t 运行 Docker 容器?
- javascript - 如何从javascript中节点列表中的单个元素切换类