如何找到使用java之间具有空格的数字的正则表达式模式

时间:2016-08-09 06:32:58

标签: java regex

这是我要匹配的正则表达式

  

5 9 5 4 1 9 9 2 2 1 4 7 3在数字和五位数之间的每个数字和一个双数之间有一个空格。

这就是我试图解决的问题

    ([0-9\\s]|[0-9]){4}[\\s]([0-9\\s]|[0-9]){5}[\\s]([0-9\\s]|[0-9]){4} 

有谁能告诉我我在这里想念的是什么?

1 个答案:

答案 0 :(得分:0)

建议的正则表达式

正则表达式

((?:\d\s*)*)

应该做的伎俩,它找到尽可能多的单位数字,由任意数量的空格分隔。

打破你的正则表达式进行解释

查看

的不同部分
([0-9\\s]|[0-9]){4}[\\s]([0-9\\s]|[0-9]){5}[\\s]([0-9\\s]|[0-9]){4} 

首先: ([0-9\\s]|[0-9]){4} 相当于[0-9\\s]{4},即:0到9之间的任何数字空格完全 4次。这将匹配字符串的前4个字符(2个数字和2个空格)。

其次: [\\s]直接等同于\\s,因为“\ s中的任何字符”等于“\ s”。

你的正则表达式的其余部分遵循相同的结构。

建议修复

我建议清理正则表达式,因为:

[0-9\s]{4}\s[0-9\s]{5}\s[0-9\s]{4}

虽然我希望你写的是:

(?:[0-9]\s?){4}\s(?:[0-9]\s?){5}\s(?:[0-9]\s?){4}

将匹配(按顺序):

  1. 由一个或没有空格分隔的4位数
  2. 1个空格
  3. 由一个或没有空格分隔的5位数
  4. 1个空格
  5. 由一个或没有空格分隔的4位数
  6. 但是我觉得上面的正则表达式会更好,因为找到由任意数量的空格分隔的数字组合会更灵活。

    结论

    我认为你的错误是[]()混淆了。 []将匹配内部的任何字符,()将匹配指定顺序中的所有字符。

    量词?也意味着1或0,并且比or运算符更快/更清晰。