首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式-匹配模式但返回子模式

正则表达式-匹配模式但返回子模式
EN

Stack Overflow用户
提问于 2016-07-15 15:47:45
回答 1查看 274关注 0票数 0

我想要匹配一个模式(使用java编程),但我只需要它的一部分。

例如..。摘自以下案文:

代码语言:javascript
复制
0 - Amount: 3 - Class 29
1 - Amount: 2 - Class 21
2 - Amount: 11 - Class 1

我想匹配模式“match:\d* - Class \d*",但只返回数字对,这样输出就像数组一样:

代码语言:javascript
复制
{
    {3, 29},
    {2, 21},
    {11, 1}
}

我能用java正则表达式实现的东西来做吗?我认为搜索匹配的字符串是不必要的,regex似乎已经为这种问题做好了准备。

还有..。正则表达式(通常,不仅仅是java正则表达式)是否有一个工具,这样就不需要更多的额外编程来从匹配的字符串中提取信息?如果其他regex实现比java更适合这项工作,我就有可能切换编程语言。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-15 15:50:17

您只需在regex中使用括号来使用捕获组:

代码语言:javascript
复制
Amount: (\d*) - Class (\d*)
        ^--^-- Here---^---^

工作演示

然后,您必须使用\1\2从它们中获取内容。在java中,您必须使用matcher.group(n)。例如,您可以有这样的代码:

代码语言:javascript
复制
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())

全IdeOne码

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38400274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档