我有很多日志与命令在里面。我与过滤 “useradd” 和所有日志在其中,但现在我要舍弃一些误报:python正则表达式不同长度“或”在后退
- ...的/ etc /默认/ useradd的...
- .../man8/useradd ...
问题是我想看到行中有误报和真实命令(参见测试用例)。
我只能使用(一个或多个)python正则表达式,因为我正在使用日志分析器程序 - 所以没有真正的python程序。 这些都是我想表达:
(!/etc/default/|/man8/)useradd # no match
(?<!/etc/default/|/man8/)useradd # look-behind requires fixed-width pattern
(?<!fault/|/man8/)useradd # works, but that's strange
在回答其他问题正则表达式改变了,使得在先行可用于 - 但我不明白这是怎么可能在这里。
[编辑:增加了一些测试案例]
## no match
cat /etc/default/useradd
less /usr/share/man/ja/man8/useradd.8.gz
## match:
useradd evil
/usr/sbin/useradd
cat /etc/default/useradd; useradd evil
cat /etc/default/useradd; /usr/sbin/useradd evil
cat /etc/default/useradd; cd /usr/lib/; ../sbin/useradd evil
抱歉,我没有清楚地说出我想要的,现在应该更清楚 –
如果使用第三方模块是您的一个选择,请考虑[regex](https://pypi.python.org/pypi /正则表达式) - 它在很多方面比股票好多了。特别是,它确实支持变量lookbehinds。 – georg
感谢您的信息 - 在这种情况下,这是不可能的,但无论如何我会记住这一点 - 谁知道我什么时候需要它在Python本身! –