首页 > 解决方案 > 正则表达式无法正常工作

问题描述

我试图在其中数字格式为“4.97”的字符串中查找,但如果它们小于 1,则它们的格式为 .97、.80 等。我想在字符串中找到这类子字符串和替换它们,使它们以 0 开头。

它适用于字符串

String str = "Rate is : .97";

Result : "Rate is : 0.97"

但不适用于字符串: String str = "Rate is : .97 . XXXXXXXXX do you want . to perform another calculation . ";

    String str = "Rate is : .97  . XXXXXXXXX do you want . 87 to perform another calculation . ";
    String pattern = "(.*\\D)(.\\d\\d.*)";
    System.out.println(str.matches("(.*\\D)(.\\d\\d.*)"));
    str = str.replaceAll(pattern, "$10$2");

为什么会这样?

标签: javaregexstring

解决方案


看起来您需要为您的正则表达式添加一些惰性匹配。

?意味着它将尝试尽可能少地匹配,在这种情况下,它只选择第一个数字而不是第二个数字。

^(.*?\D)(.\d\d.*?)

你可以在这里看到这个正则表达式的工作,并有更完整的解释。

我还添加了^字符串匹配器的开头,以确保它只创建一个匹配并且不会重复到第二个匹配。


推荐阅读