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

标签 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

最佳答案

您可以将其修复为

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() 与此正则表达式一起使用来查找部分匹配。

关于java - 如何使用正则表达式提取字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47811628/

相关文章:

javascript - 正则表达式:找到最小匹配...?不剪它

正则表达式进行过滤,然后确定最新日期

regex - 有没有办法使用正匹配正则表达式运算符对字符串进行负匹配?

java - 为什么 GSON 使用字段而不是 getter/setter?

java - Android:对 arrayList 中的名称列表进行排序并将它们链接到适当的 ID

java - 断言某些参数化 vector 会在 JUnit 中抛出异常?

java - 列表中的过滤器无法正常工作

java - JSF 中的请求范围

r - 如何将 2 行或更多行文本合并为 1 行,条件是 R

regex - 应用包含字符串的正则表达式