在java中输出Match Capturing组

时间:2013-05-15 17:08:17

标签: java regex

我是正则表达式的新手并尝试处理以下正则表达式来识别给定文本中的序数

((\\d*1)st|(\\d*2)nd|(\\d*3)rd|(\\d+)th)

我想只捕获文本的数字部分进行解析,即。如果文本是21,那么我想捕获21被解析为整数。我知道如何匹配正则表达式以了解模式是否存在并获得特定组。有没有什么办法可以让我们从表达式中获得匹配的组来提取值?

提前致谢

2 个答案:

答案 0 :(得分:1)

您可以重写正则表达式以使用非捕获组,如下所示:

(?:(\\d*)(?:st|nd|rd|th))

答案 1 :(得分:0)

我简化了你的正则表达式,而且 - 重要的是 - 我在每一侧添加了通配符。第一张通配符有?防止贪婪匹配摆脱例如21st

使用模式/匹配方法可以提取组。

Pattern p = Pattern.compile(".*?(\\d*(1st|2nd|3rd|th)).*");
String input = "21st March 2013";
Matcher m = p.matcher(input);
if(m.matches())
    System.out.println(m.group(1));