我想要匹配一个模式(使用java编程),但我只需要它的一部分。
例如..。摘自以下案文:
0 - Amount: 3 - Class 29
1 - Amount: 2 - Class 21
2 - Amount: 11 - Class 1我想匹配模式“match:\d* - Class \d*",但只返回数字对,这样输出就像数组一样:
{
{3, 29},
{2, 21},
{11, 1}
}我能用java正则表达式实现的东西来做吗?我认为搜索匹配的字符串是不必要的,regex似乎已经为这种问题做好了准备。
还有..。正则表达式(通常,不仅仅是java正则表达式)是否有一个工具,这样就不需要更多的额外编程来从匹配的字符串中提取信息?如果其他regex实现比java更适合这项工作,我就有可能切换编程语言。
发布于 2016-07-15 15:50:17
您只需在regex中使用括号来使用捕获组:
Amount: (\d*) - Class (\d*)
^--^-- Here---^---^

然后,您必须使用\1和\2从它们中获取内容。在java中,您必须使用matcher.group(n)。例如,您可以有这样的代码:
String str = "0 - Amount: 3 - Class 29\n1 - Amount: 2 - Class 21\n2 - Amount: 11 - Class 1";
Pattern pattern = Pattern.compile("Amount: (\\d*) - Class (\\d*)");
Matcher matcher = pattern.matcher(str);
StringBuffer sb = new StringBuffer("{");
while (matcher.find()){
sb.append(String.format("{%s, %s},", matcher.group(1), matcher.group(2)));
}
sb.setLength(sb.length()-1); // remove last comma
sb.append("}");
System.out.println(sb.toString())https://stackoverflow.com/questions/38400274
复制相似问题