这是我要匹配的正则表达式
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}
有谁能告诉我我在这里想念的是什么?
答案 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或0,并且比or
运算符更快/更清晰。