gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:41:42 25 4
gpt4 key购买 nike

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

示例...来自以下文本:

0 - Amount: 3 - Class 29
1 - Amount: 2 - Class 21
2 - Amount: 11 - Class 1

我想匹配模式“Amount:\d* - Class\d*”,但仅返回数字对,以便输出类似于数组:

{
{3, 29},
{2, 21},
{11, 1}
}

我可以使用 java 正则表达式中实现的东西来做到这一点吗?我认为搜索匹配的字符串是不必要的,正则表达式似乎已经为此类问题做好了准备。

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

最佳答案

您只需在正则表达式中使用括号来使用捕获组:

Amount: (\d*) - Class (\d*)
^--^-- Here---^---^

Regular expression visualization

<强> Working demo

然后您必须使用 \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())

<强> Full IdeOne code

关于java - 正则表达式 - 匹配模式但返回子模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38400274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com