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

时间:2015-04-17 22:53:01

标签: java regex lookbehind

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

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

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

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

我试图通过以下方式实现这一目标:(^\d+|(?<!>|<|=)\s+\d+)没有运气。

2 个答案:

答案 0 :(得分:0)

您可以使用negative-lookbehind机制。

我们想要找到并替换没有

的数字
  • ><=之前有空格
  • 但是因为200 00部分还没有< > =之前我们必须添加条件,我们也不想要替换在他们之前有数字的数字

所以你的代码看起来像

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

BTW:您无需围绕正则表达式创建单独的群组,因此您可以通过$1使用它,因为群组0始终包含完整匹配。环视机制也是零长度,这意味着它们不包含在匹配中。

演示:

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

输出:

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

答案 1 :(得分:0)

我试了一下,为我工作得很好:

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