从字符串中提取数字和名称

Dom*_*ikM 2 java regex

我的目标是从java中的字符串中提取名称和数字.示例:输入 - >输出

1234 - >数字:[1234],姓名:[]

1234,34,234 - >数字:[1234,34,234],名称:[]

12,foo,123 - >数字:[12,123],姓名:[foo]

foo3,1234,4bar,12,12foo34 - >数字:[1234,12],姓名:[foo3,4bar,12foo34]

foo,bar - > - > numbers:[],姓名:[foo,bar]

我想出了[^,]+(,?!,+)*匹配字符串的所有部分,但我不知道如何只匹配数字或名称(名称可以包含数字 - 如例子).谢谢

Luk*_*der 5

这是一个仅限正则表达式的解决方案:

(?:(\d+)|([^,]+))(?=,|$)
Run Code Online (Sandbox Code Playgroud)

第一组(\d+)捕获数字,第二组([^,]+)捕获其余数据.组必须后跟逗号或行尾(?=,|$).

快速演示:

Pattern p = Pattern.compile("(?:(\\d+)|([^,]+))(?=,|$)");
Matcher m = p.matcher("foo3,1234,4bar,12,12foo34");

while (m.find()) {
    System.out.println(m.group(1) != null 
        ? "Number: " + m.group(1)  
        : "Non-Number: " + m.group(2));
}
Run Code Online (Sandbox Code Playgroud)

输出:

Non-Number: foo3
Number: 1234
Non-Number: 4bar
Number: 12
Non-Number: 12foo34
Run Code Online (Sandbox Code Playgroud)