我的目标是从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]
我想出了[^,]+(,?!,+)*匹配字符串的所有部分,但我不知道如何只匹配数字或名称(名称可以包含数字 - 如例子).谢谢
这是一个仅限正则表达式的解决方案:
(?:(\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)
| 归档时间: |
|
| 查看次数: |
901 次 |
| 最近记录: |