You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅用regex匹配CNPJ且排除含INTERESSADO子串的匹配项

你原正则的问题在于负向前瞻的校验范围错误:你写的(?!interessado: )仅校验了表达式起始位置的后续字符是否直接匹配interessado: ,没有检查整个匹配段中是否存在INTERESSADO子串,所以即使行内包含INTERESSADO,只要不是紧跟在起始位置后面,都会被正则匹配到。

修正后的正则如下:

^(?!.*INTERESSADO).*?CNPJ\W+(?P<cnpj>\d+\.\d+\.\d+\s?\/\d+\s?-\s?\d+)

正则各部分作用说明:

  • ^ 匹配行首,确保从每一行的起始位置开始校验,如果你的文本是多行格式,建议额外开启多行匹配(m)标志,让^可以准确匹配每一行的行首,避免跨行匹配的问题
  • (?!.*INTERESSADO) 负向前瞻,校验当前行从开头到后续所有位置中,不存在INTERESSADO子串,存在就直接终止匹配
  • .*? 非贪婪匹配行内CNPJ之前的任意字符
  • CNPJ\W+ 匹配CNPJ标识以及其后的非单词分隔符
  • (?P<cnpj>\d+\.\d+\.\d+\s?\/\d+\s?-\s?\d+) 命名分组捕获符合格式的CNPJ,兼容分隔符前后的空格

在你已开启不区分大小写(i)和点号匹配换行(s)的标志下,该正则会自动过滤所有包含INTERESSADO的行,仅捕获RECLAMADO对应的CNPJ,完全符合你不使用if条件、仅靠正则实现过滤的要求。


内容的提问来源于stack exchange,提问作者Daniel Bailo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:45:11