使用正则表达式和Java查找第一个匹配项

使用正则表达式和Java查找第一个匹配项,java,regex,Java,Regex,我希望能够找到m²的第一个匹配项,然后找到它前面的数字,可以是整数或十进制数。 例如 “一些文字”38平方米“一些文字” “一些文字”48,8 m²“一些文字” “一些文字”48平方米“一些文字”等 到目前为止,我得到的是: \d\d,\d\s*(\m\u00B2)|\d\d\s*(\m\u00B2) 现在可以找到所有出现的情况,不过我想可以用findFirst()修复。如何改进正则表达式部分?要获得第一个匹配,只需在if块中使用匹配器#find(): String rx = "\\d+(?:

我希望能够找到m²的第一个匹配项,然后找到它前面的数字,可以是整数或十进制数。 例如

“一些文字”38平方米“一些文字”

“一些文字”48,8 m²“一些文字”

“一些文字”48平方米“一些文字”等

到目前为止,我得到的是:

\d\d,\d\s*(\m\u00B2)|\d\d\s*(\m\u00B2)

现在可以找到所有出现的情况,不过我想可以用
findFirst()
修复。如何改进正则表达式部分?要获得第一个匹配,只需在
if
块中使用
匹配器#find()

String rx = "\\d+(?:,\\d+)?\\s*m\\u00B2";
Pattern p = Pattern.compile(rx);
Matcher matcher = p.matcher("E.g. : 4668,68 m² some text, some text 48 m²  etc");
if (matcher.find()){
    System.out.println(matcher.group());
}

请注意,您可以使用可选的非捕获组
(?:..)?

模式分解:

  • \d+
    -1+位
  • (?:,\d+)
    -0+逗号序列,后跟1+位
  • \s*
    -0+空格符号
  • m\u00B2
    -m2

这是我为您提供的帮助:)(正在进行中,稍后它将返回BigDecimal值),目前它似乎可以工作:

 public static String findArea(String description) {

        String tempString = "";
        Pattern p = Pattern.compile("\\d+(?:,\\d+)?\\s*m\\u00B2");

        Matcher m = p.matcher(description);

        if(m.find()) {
            tempString = m.group();
        }
//remove the m and /u00B2 to parse it to BigDecimal later
        tempString = tempString.replaceAll("[^0-9|,]","");
        System.out.println(tempString);
        return tempString;
    }

一个简单的方法

description.replaceFirst(@NotNull String regex,
                           @NotNull String replacement)

JAVADoc:用给定的替换项替换此字符串中与给定正则表达式匹配的第一个子字符串。

检查此项:建议:在数字周围添加捕获组,这样就可以使用
group(1)
提取它,并使用
DecimalFormat
解析它。当然,可以围绕数字设置捕获组,只有OP原始模式没有该组。