使用正则表达式和Java查找第一个匹配项
我希望能够找到m²的第一个匹配项,然后找到它前面的数字,可以是整数或十进制数。 例如 “一些文字”38平方米“一些文字” “一些文字”48,8 m²“一些文字” “一些文字”48平方米“一些文字”等 到目前为止,我得到的是:使用正则表达式和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+(?:
\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());
}
看
请注意,您可以使用可选的非捕获组(?:..)?
模式分解:
-1+位\d+
-0+逗号序列,后跟1+位(?:,\d+)
-0+空格符号\s*
-m2m\u00B2
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原始模式没有该组。