如何使用正则表达式提取字符串的一部分

时间:2017-12-14 10:56:26

标签: java regex

我试图提取最后三个字符串,即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

1 个答案:

答案 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

模式详情

  • [^,]* - 除,
  • 以外的0个字符
  • (?:,[^,]*){2} - 重复2次
    • , - 逗号
    • [^,]* - 除,
    • 以外的0个字符
  • $ - 字符串结束。

请注意,您应该使用Matcher#find()与此正则表达式来查找部分匹配。