在 replaceAll 调用中修改部分正则表达式
Modifying part of a regex in replaceAll call
我正在尝试使用正则表达式格式化字符串,如下所示:
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
我如何创建正则表达式以便它只删除 .0 而不是 + 号?
我更愿意在同一个电话到"replaceAll"
中完成所有事情
感谢任何建议
匹配的字符将被替换。因此,您可以使用先行,而不是 匹配 末尾的非数字,这将执行所需的检查但不会消耗任何字符。此外,非数字的 shorthand 是 \D
,比 [^0-9]
:
更易读
String string = "5.07+12.0+2.14";
string = string.replaceAll("\.0(?=\D)","");
如果您想替换 所有 尾随零(例如,将 5.00
替换为 5
而不是 50
,您可能不想),然后用 +
重复 0 一次或多次,以确保 all 替换小数点后的零:
String string = "5.07+12.000+2.14";
string = string.replaceAll("\.0+(?=\D)","");
如果字符串从不包含 字母或下划线 _
字符(这些字符和数字字符算作单词字符),那么您可以使用单词使其更漂亮边界而不是前瞻。单词边界,顾名思义,将匹配一个位置,一侧是单词字符,另一侧是非单词字符,\b
:
string = string.replaceAll("\.0+\b","");
我正在尝试使用正则表达式格式化字符串,如下所示:
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
我如何创建正则表达式以便它只删除 .0 而不是 + 号?
我更愿意在同一个电话到"replaceAll"
中完成所有事情感谢任何建议
匹配的字符将被替换。因此,您可以使用先行,而不是 匹配 末尾的非数字,这将执行所需的检查但不会消耗任何字符。此外,非数字的 shorthand 是 \D
,比 [^0-9]
:
String string = "5.07+12.0+2.14";
string = string.replaceAll("\.0(?=\D)","");
如果您想替换 所有 尾随零(例如,将 5.00
替换为 5
而不是 50
,您可能不想),然后用 +
重复 0 一次或多次,以确保 all 替换小数点后的零:
String string = "5.07+12.000+2.14";
string = string.replaceAll("\.0+(?=\D)","");
如果字符串从不包含 字母或下划线 _
字符(这些字符和数字字符算作单词字符),那么您可以使用单词使其更漂亮边界而不是前瞻。单词边界,顾名思义,将匹配一个位置,一侧是单词字符,另一侧是非单词字符,\b
:
string = string.replaceAll("\.0+\b","");