我有一个字符串列表,其格式如下:
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+)
没有运气。
答案 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)
我试了一下,为我工作得很好: