我是正则表达式的新手,并试图处理以下正则表达式以识别给定文本中的序数
((\\d*1)st|(\\d*2)nd|(\\d*3)rd|(\\d+)th)
我只想捕获文本的数字部分以进行解析,即。如果文本是第 21 个,那么我想捕获 21 以解析为 Integer 。我知道如何匹配正则表达式以了解模式是否存在并获取特定组。有什么办法可以让匹配的组作为表达式的输出来提取值?
提前致谢
您可以重写您的正则表达式以使用非捕获组,如下所示:
(?:(\\d*)(?:st|nd|rd|th))
我已经简化了你的正则表达式,而且 - 重要的是 - 我在每一边都添加了通配符。第一个通配符有 ? 以防止贪婪匹配摆脱 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));