我正在尝试在 java 中进行以下替换
@Test
public void testReplace(){
String str = "1JU3C_2.27.CBT";
String find = "(\\d*)\\.(\\d*)";
String replace = "$1,$2";
String modified = str.replaceAll(find, replace);
System.out.println(modified);
assertEquals("1JU3C_2,27.CBT", modified); //fails
}
然而,两个句号似乎都被替换了。我正在考虑仅替换数字小数。 (即期望输出 1JU3C_2,27.CBT)
最佳答案
使用 (\\d+)\\.(\\d+)
而不是 (\\d*)\\.(\\d*)
。
您的正则表达式要求替换零个或多个数字,后跟一个点,后跟零个或多个数字。因此 .CBT 中的 . 是匹配的,因为它的两侧都有一个数字为零的点。
1JU3C_2.27.CBT 有两个点,两边都有零个或多个数字。
如果要将 5.67.8 等字符串转换为 5,67,8,请使用延迟匹配 (\\d+?)\\.(\\d+?)
。
关于java - java中的正则表达式替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19723282/