我正在尝试使用Java中的正则表达式在给定数量的“,”后分割字符串
说我有:
“1,2,3,4,5,6,7,8,9,10”
我想将字符串拆分为第5个“,”,正则表达式是什么?
预期结果:
“1,2,3,4,5” “6,7,8,9,10”
我尝试过使用“。{30}”,但这算作一切都不合适。使用“\\ d {30}”不会在第30位后分割。
谢谢!
答案 0 :(得分:2)
如果您不需要验证输入,那么您可以使用此正则表达式匹配5个数字的组(除了最后一个,可以有1到4个数字)。
假设输入有效,当前面有5个数字时,正则表达式将始终匹配所有5个数字,因此唯一可以匹配的情况是当可用数量少于5时。
Matcher m = Pattern.compile("\\d+(?: *, *\\d+){0,4}").matcher(input);
while (m.find()) {
System.out.println(m.group());
}
给定输入"1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11"
,输出:
1, 2, 3, 4, 5
6, 7, 8, 9, 10
11
(无前导或尾随空格)
如果要验证和同时提取结果,正则表达式会更复杂。
答案 1 :(得分:1)
您可以使用此正则表达式进行匹配:
(?:\d+, *){4}\d+
这将为您提供2场比赛:
1, 2, 3, 4, 5
6, 7, 8, 9, 10
<强>代码:强>
String s = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15";
Pattern pat = Pattern.compile("(?:\\d+, *){4}\\d+");
Matcher mat = pat.matcher(s);
StringBuilder output = new StringBuilder();
while(mat.find()) {
output.append(mat.group()).append("\n");
}
System.out.print(output);
<强>输出:强>
1, 2, 3, 4, 5
6, 7, 8, 9, 10
11, 12, 13, 14, 15
答案 2 :(得分:0)
使用组捕获零件的1匹配示例:
((?:\d+\,\s*){4}\d+),\s*(.+)
使用perl的shellcript中的用法:
$ echo '1, 2, 3, 4, 5, 6, 7, 8, 9, 10' | perl -p -e 's/((?:\d+\,\s*){4}\d+),\s*(.+)/One: [\1], Another: [\2]/'
One: [1, 2, 3, 4, 5], Another: [6, 7, 8, 9, 10]
https://regex101.com/r/hL0eH7/2
但我不会使用正则表达式,通常你会更好地使用编程语言的字符串处理函数。