2

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

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

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

提前致谢

4

2 回答 2

1

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

(?:(\\d*)(?:st|nd|rd|th))
于 2013-05-15T17:17:10.633 回答
0

我已经简化了你的正则表达式,而且 - 重要的是 - 我在每一边都添加了通配符。第一个通配符有 ? 以防止贪婪匹配摆脱 eg 的第一个数字21st

Pattern/Matcher 方法允许您提取组。

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));
于 2013-05-15T17:15:33.723 回答