请注意:我正在使用 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/