正则表达式+ Java - 如何捕获尾随数字和其他所有内容

时间:2017-07-24 21:09:30

标签: java regex

我试图捕获字符串中的2个东西" T3st12345"

我想捕获尾随数字(" 12345")以及测试名称" T3st"。

这就是我现在要将尾随数字与java的Matcher库相匹配:

Pattern pattern = Pattern.compile("([0-9]*$)");
Matcher matcher = pattern.matcher("T3st12345");

但它返回"未找到匹配"。

如何为尾随数字进行此工作?如何捕获测试名称?

2 个答案:

答案 0 :(得分:2)

您可以将此正则表达式与2个捕获的组一起使用:

^(.*?)(\d+)$

RegEx Demo

RegEx分手:

  • ^:开始
  • (.*?):捕获任何角色零(懒惰)
  • 的组#1
  • (\d+):捕获的组#1在结束
  • 之前匹配一个或多个数字
  • $:结束

答案 1 :(得分:2)

您可以使用以下正则表达式:

Pattern pattern = Pattern.compile("(\\p{Alnum}+?)([0-9]*)");
Matcher matcher = pattern.matcher("T3st12345");
if (matcher.matches()) {
    System.out.println(matcher.group(1));
    System.out.println(matcher.group(2));
}

请参阅Java demo

(\\p{Alnum}+?)([0-9]*)方法中使用.matches()模式(要求完整的字符串匹配),并尽可能少地匹配和捕获第1组中的一个或多个字母数字字符({{1} }是一个惰性量词),并将任何零个或多个数字捕获到第2组。

请注意,+?可以替换为更明确的\\p{Alnum}