Java - 正则表达式 - 捕获数字,但前提是前面没有比较器

Java - regexp - capture digits but only if not preceded by a comparator

我有一个字符串列表,其格式如下:

128 and 228 and alpha > 200 and bravo < 400 or charlie = 400

现在我想替换所有出现的 \d+,除非它前面有关系运算符 (<|>|=)。否则,对字符串的 replaceAll 方法的调用应将所有出现的 \d+ 替换为 s.。所以上面的字符串将被转换成类似:

s.128 and s.228 and alpha > 200 and bravo < 400 or charlie = 400

我尝试通过以下方法实现此目的:(^\d+|(?<!>|<|=)\s+\d+) 运气不佳。

你可以使用negative-lookbehind机制。

我们要查找并替换没有

的数字
  • > OR < OR = with space before
  • 但是因为在 200 00 部分也没有 < > = 之前我们必须添加我们也没有的条件想要替换前面有数字的数字

所以你的代码看起来像

replaceAll("(?<![>=<]\s|\d)\d+", "s.[=10=]")

顺便说一句:您不需要围绕您的正则表达式来创建单独的组,因此您可以通过 </code> 使用它,因为组 <code>0 始终包含整个匹配项。环视机制也是零长度的,这意味着它们不包含在匹配中。

演示:

String text = "128 and 228 and alpha > 200 and bravo < 400 or charlie = 400";
text = text.replaceAll("(?<![>=<]\s|\d)\d+", "s.[=11=]");
System.out.println(text);

输出:

s.128 and s.228 and alpha > 200 and bravo < 400 or charlie = 400

我试过了,对我来说效果很好:

https://regex101.com/r/fU9rH6/2