我的输入字符串是这样的:
foo 12
12 foo 123
foo 12 foo 1234
f1o2o 12345
foo 12 123456
...
我需要捕获最后一个数字:12, 123, 1234, 12345, 123456 ...
每一行都是单独处理的:
Pattern p = Pattern.compile(".*([0-9]+)$");
Matcher m = p.matcher("foo 12 123456");
m.matches()
输出:6
有没有任何形式来反转匹配?或者我该如何更改模式以恢复最后一个数字?
答案 0 :(得分:1)
无需对其进行分组,只需检查数字后跟行尾。
\d+$
示例代码:
Pattern p = Pattern.compile("\\d+$",Pattern.MULTILINE);
Matcher m = p.matcher("foo 12 123456\n12 foo 123");
while (m.find()) {
System.out.println(m.group());
}
输出:
123456
123
贪婪尽可能多地查找匹配项,因此它也捕获数字并留下[0-9]+
按照@Zack Newsham
的建议让它变得非贪婪您也可以尝试使用Positive Lookbehind。
(?<=\D)\d+$
答案 1 :(得分:1)
将贪婪的量词变为不情愿的量词并使用单行方法:
String lastNum = str.replaceAll("^.*?(\\d+)\\D*$", "$1");
这会从123456
等
foo 12 123456