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