我正在尝试按以下方式匹配电话号码:
9 99 99 99 99
0999999999
11 0999999999
9 9999 9999
但不是以下内容:
9 99 99 99 99 (two spaces)
9 99\n99 99 99
因此,我想匹配7到12位数字,并在它们之间选择一个空格,而不是多个空格的序列。
到目前为止,我想出了"[\d ?]{7,12}"
,但是它实际上与要求不符,因为空格是在{7,12}中计算的,并且它也匹配两个空格序列。
答案 0 :(得分:2)
[\d ?]{7,12}
是一种匹配7到12位数字,空格或?
字符的模式。它可以与???????
字符串匹配,因为?
不是量词,而是在字符类中声明时仅仅是问号符号。
如果将其更改为(?:\d ?){7,12}
,则可以部分解决问题,即末尾的空格。我建议使用
\b\d(?: ?\d){6,11}\b
请参见regex demo
单词边界\b
将确保您只匹配整个单词。
详细信息
\b
-前导词边界\d
-一个数字(?: ?\d){6,11}
-的6至11个连续序列
?
-可选空格\d
-一位数字\b
-尾随单词边界。答案 1 :(得分:1)
我会尝试
(?:\d+ ?){7,12}
原始正则表达式匹配7到12次空格或数字字符组。提供的正则表达式与一个数字匹配,后跟7到12次可能的空格。这样一来,空格就不会算作总数的一部分。
答案 2 :(得分:1)
您可以使用
\d(\s?\d){6,11}
第一个\d
与第一个数字匹配。接下来可以跟随一组6到11对(总共7到12个)对的可选空格,后跟一个数字。不允许有多个空格,因为您看到每个可选空格的两边都有数字。可以检查here该正则表达式与此等效,但更短:
\d\s?\d\s?\d\s?\d\s?\d\s?\d((((((\s?\d)?\s?\d)?\s?\d)?\s?\d)?\s?\d)?\s?\d)?
可以检查的here。
请注意\s
与换行符匹配,因此您可以获得多行号(如示例中所示)。如果您不喜欢这种行为,请使用简单的空格来缩小空间类别,如< / p>
\d( ?\d){6,11}
可以测试的here看,现在,一个12位数以上的数字将被截断为仅前十二个数字,如果不需要的话,请在末尾使用单词边界,如
\d( ?\d){6,11}\b
here看到它。