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
我试过了,对我来说效果很好:
我有一个字符串列表,其格式如下:
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
我试过了,对我来说效果很好: