匹配数字前面没有字符串

ber*_*uic 6 python regex

我正在使用Python正则表达式分析一些非常大的日志文件.我需要替换日志文件中的每个数字,除了前面带有'java:'的数字(日志文件由java程序生成).

这意味着,鉴于我们有一句话:

这是一个伪造的测试线,限制= 300做53轮,错误在(Abc.java:417)还有一些

数字300和53应该被替换,但不是417.

我按行过滤,应该注意并非所有行都包含java:[number].

我得到的最接近的是 ((?<!java:)[0-9]+)

And*_*ong 4

可能发生了什么

((?<!java:)[0-9]+)
Run Code Online (Sandbox Code Playgroud)

当然,此时的比赛,

java:
     ^
Run Code Online (Sandbox Code Playgroud)

失败了,但是在这一点上,

java:4
      ^
Run Code Online (Sandbox Code Playgroud)

成功了,因为确实ava:4不是java:

你只需要再添加一个负面的lookbehind,

((?<!java:)(?<![0-9])[0-9]+)
           ^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

因此只考虑“完整”数字。

  • @beruic - 简而言之,它只是做了两个测试。(1) 测试该点前面是否没有`java:`。(2) 测试该点前面是否有数字(因为如果是,那么我们知道我们位于数字的“中间”,即我们已经检查了“java:”)当我们位于数字的_开头_时,因此不要重新测试并因为“ava:4”而引发错误匹配)。但不确定这是否能让事情变得更清楚。 (2认同)