使用Regex和Java查找第一个匹配项

我希望能够找到第一次出现的m²,然后在它前面的数字,可以是整数或十进制数。 例如: “some text”38m²“some text”,“some text”48,8m²“some text”,“some text”48m²“some text”等。

到目前为止我所拥有的是:

\ d \ d,\ d \ S *(\米\ u00B2)| \ d \ d \ S *(\米\ u00B2)

这个现在找到所有出现,虽然我想它可以用findFirst()修复。 任何想法如何改进正则表达式部分?

要获得第一个匹配,您只需要在if块中使用Matcher#find()

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

请参阅IDEONE演示

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

模式细分:

  • \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; }