python - RegEx 如何根据特定位置的字符否定匹配

标签 python regex sas regex-negation regex-lookarounds

请注意:我正在使用 Python(3.6 版)编程,但也想将这些正则表达式移植到 SAS。

这里的大图是我正在使用 SAS 日志,我想排除打印到日志的来自 %include 语句的行。基本上,我想要完成的事情看起来像这样:

54210      proc sort data=inds out=outds;

我不想要的行将如下所示:

33406     +%global  var1 var2 var3;

关键是第 11 个字符将是一个 '+',但左边总会有一组数字后面跟着一组空格,其长度最终将是 11 个空格 - 除非 这是一个 %include 行,我想排除它。

我目前的情况是这样的:

^[0-9]{1,11} (?! {2,10}\+)

这有助于从我测试过的日志中准确地获取我想要的内容,但它远非正确。简单的方法是使用这个表达式:

^[0-9]{1,11} {3,10}

然后添加一个额外条件,如果第 11 个字符是“+”,则忽略该行,但我可以在单个正则表达式中执行此操作吗?我遇到了前瞻/后视研究,但问题是第一个匹配组的长度可能会有所不同,它会在预期“+”的位置移动——所以有没有一种方法可以匹配一组中的一个组length, then 如果匹配后跟一个字符则否定匹配?

最佳答案

你可以使用

^\d+ +(?<=.{11})

参见 regex demo

详情

  • ^ - 字符串开始
  • \d+ + - 1+ 个数字,然后 1+ 个空格
  • (?<=.{11}) - 一个积极的后视检查,需要紧邻当前位置左侧的 11 个字符。

关于python - RegEx 如何根据特定位置的字符否定匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52709876/

相关文章:

python - 根据总数的比例删除 pandas 数据框中的行

regex - Emacs Lisp 相当于 JavaScript 的 RegExp#exec

python - 在带有 SP1 的 Windows 7 32 位上安装 Python 3.8

python - pandas 中的条件计算

python - 确定要使用 mechanize 操作 html 表中的哪一行

stream - SAS 过程流 : weird linebreaks

sas - sas中的长数字读取

sas - 对SAS中的动态列数进行排名

python - 将相同的参数传递给多个函数 - Python

javascript - 正则表达式匹配部分单词,前面没有任何内容,但允许有空格