如何检查给定字符的特定数量

时间:2015-01-09 16:56:54

标签: java regex

我正在尝试使用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位后分割。

谢谢!

3 个答案:

答案 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+

RegEx Demo

这将为您提供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

但我不会使用正则表达式,通常你会更好地使用编程语言的字符串处理函数。