java - java中的正则表达式替换

标签 java regex

我正在尝试在 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
}

然而,两个句号似乎都被替换了。我正在考虑仅替换数字小数。 (即期望输出 1JU3​​C_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/

相关文章:

java - PrimeFaces 3.0 - <p :dataTable> headers do not line up with using scrollable ="true"

java - java函数内的局部变量是线程安全的吗

仅当有两个或多个空格时才替换字符串中的空格

regex - 使用正则表达式验证数据是否正确?

ruby - 如何在 ruby​​1.8 中重写正则表达式 (?&lt;!...)。 (重新实现 wpautop 功能)

java - 尝试使用 fragment 中的 Bundle 调用虚拟方法 java.util.ArrayList

java - animateLayoutChanges 单独对元素进行动画处理,即使它们位于 ViewGroup 中

mysql - 需要 SQL-Regexp 帮助 : Find lowercase char before uppercase char

具有前瞻性的 Java 正则表达式

java - 无法从 ArrayList<String> 转换为 String[]