我是新来的正则表达式,并试图处理下面的正则表达式来udentify序中Outputing匹配的捕获组在java中
((\\d*1)st|(\\d*2)nd|(\\d*3)rd|(\\d+)th)
我想捕捉只有文本解析,即数量的部分给定的文本。如果文本是21,那么我想捕获21被解析为整数。我知道如何匹配正则表达式来理解模式是否存在并获得特定的组。有什么办法可以得到匹配的表达组作为表达式的输出提取值?每侧我已经添加了通配符 -
在此先感谢
我是新来的正则表达式,并试图处理下面的正则表达式来udentify序中Outputing匹配的捕获组在java中
((\\d*1)st|(\\d*2)nd|(\\d*3)rd|(\\d+)th)
我想捕捉只有文本解析,即数量的部分给定的文本。如果文本是21,那么我想捕获21被解析为整数。我知道如何匹配正则表达式来理解模式是否存在并获得特定的组。有什么办法可以得到匹配的表达组作为表达式的输出提取值?每侧我已经添加了通配符 -
在此先感谢
你可以重写你的正则表达式使用非捕获组是这样的:
(?:(\\d*)(?:st|nd|rd|th))
只要扔掉外面的非捕获组。你不需要在这里做任何分组。 – nhahtdh
谢谢输出正是我需要的。 – user1411335
我已经简化您正则表达式,以及 - 重要的。第一个通配符有?为了防止贪婪匹配,摆脱第一个数字例如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));
谢谢这有助于! – user1411335
仅供参考,'11th','12th'和'13th'。但是,由于你是匹配文本,它并不重要,(最后一种情况已经涵盖了这些)。 – nhahtdh