正则表达式以匹配数字以及它们之间最多一个空格

时间:2018-08-31 16:28:27

标签: python regex

我正在尝试按以下方式匹配电话号码:

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}中计算的,并且它也匹配两个空格序列。

3 个答案:

答案 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看到它。