我试图提取最后三个字符串,即05,06,07。然而,我的正则表达式正在以另一种方式工作,即提取前三个字符串。有人可以帮我纠正我在代码中的错误。
Pattern p = Pattern.compile("^((?:[^,]+,){2}(?:[^,]+)).+$");
String line = "CgIn,f,CgIn.util:srv2,1,11.65,42,42,42,42,04,05,06,07";
Matcher m = p.matcher(line);
String result;
if (m.matches()) {
result = m.group(1);
}
System.out.println(result);
我目前的输出:
CgIn,f,CgIn.util:srv2
预期输出:
05,06,07
答案 0 :(得分:4)
您可以将其修改为
Pattern p = Pattern.compile("[^,]*(?:,[^,]*){2}$");
String line = "CgIn,f,CgIn.util:srv2,1,11.65,42,42,42,42,04,05,06,07";
Matcher m = p.matcher(line);
String result = "";
if (m.find()) {
result = m.group(0);
}
System.out.println(result);
请参阅Java demo
正则表达式是
[^,]*(?:,[^,]*){2}$
请参阅regex demo。
模式详情
[^,]*
- 除,
(?:,[^,]*){2}
- 重复2次
,
- 逗号[^,]*
- 除,
$
- 字符串结束。请注意,您应该使用Matcher#find()
与此正则表达式来查找部分匹配。