在replaceAll调用中修改正则表达式的一部分

时间:2018-09-07 01:37:22

标签: java regex replaceall

我正在尝试使用正则表达式格式化字符串,如下所示:

String string = "5.07+12.0+2.14";
string = string.replaceAll("\\.0[^0-9]","");

我认为将要发生的是字符串将变为:

5.07+122.14 //the regex will delete the .0+ next to the 12

如何创建正则表达式,以便仅删除.strong而不是+符号?

我宁愿在同一通话中进行所有操作以“全部替换”

感谢任何建议

1 个答案:

答案 0 :(得分:3)

匹配的字符将被替换。因此,您可以使用lookahead而不是最后匹配 非数字,它将执行所需的检查,但不会消耗任何字符。另外,非数字的简写为\D,比[^0-9]读起来更好:

String string = "5.07+12.0+2.14";
string = string.replaceAll("\\.0(?=\\D)","");

如果您想替换 all 尾随零(例如,将5.00替换为5而不是50,这可能是您不希望的) ,然后用+重复0一次或多次,以确保小数点后的所有零被替换:

String string = "5.07+12.000+2.14";
string = string.replaceAll("\\.0+(?=\\D)","");

如果字符串从不包含字母或下划线_字符(这些字符和数字字符算作单词字符),则可以使其更漂亮,且带有单词边界而不是先行。听起来像是一个单词边界,该位置将在一侧与一个单词字符在另一侧与一个非单词字符与\b相匹配的位置:

string = string.replaceAll("\\.0+\\b","");