请注意:我正在使用Python(版本3.6)进行编程,但也希望将这些正则表达式移植到SAS中。
大致情况是,我正在处理一个SAS日志,并且希望排除来自%include语句的打印在日志中的行。基本上,我想要实现的效果如下:
重点在于第11个字符将是“+”,但是左侧始终会有一组数字,后跟一组空格,其长度最终将为11个空格-除非它是一个%include行,我要将其排除。
到目前为止,我拥有的是这样的内容:
大致情况是,我正在处理一个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个字符是“+”,则忽略该行,但我可以在单个正则表达式中完成这个操作吗?我在处理此问题时遇到了前瞻/后顾,但问题在于第一匹配的组长度可能会变化,这就使得预期的“+”的位置发生了变化 - 所以我能否在一定长度内匹配一组,然后如果其后跟一个字符,则否定匹配?
^[0-9]{1,11} {3,10}
已经确保第11个字符不是+
。 - Wiktor Stribiżew