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

jcp*_*jcp 7 python regex

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

9 99 99 99 99
0999999999
11 0999999999
9 9999 9999
Run Code Online (Sandbox Code Playgroud)

但不是以下:

9 99  99 99 99 (two spaces)
9 99\n99 99 99 
Run Code Online (Sandbox Code Playgroud)

因此,我想匹配 7 到 12 位数字和它们之间的可选空格,但不是多个空格的序列。

到目前为止,我想出了"[\d ?]{7,12}",但它并不真正符合要求,因为空格被计入 {7,12} 并且它还匹配两个空格序列。

Wik*_*żew 5

[\d ?]{7,12}是匹配 7 到 12 位数字、空格或?字符的模式。它可以匹配一个???????字符串,因为?它不是一个量词,而在字符类中声明时只是一个问号符号。

如果将其更改为(?:\d ?){7,12},则可以部分解决问题,末尾的空格。我建议使用

\b\d(?: ?\d){6,11}\b
Run Code Online (Sandbox Code Playgroud)

查看正则表达式演示

单词边界\b将确保您只匹配整个单词。

细节

  • \b - 前导词边界
  • \d - 一个数字
  • (?: ?\d){6,11} - 6 到 11 个连续的序列
    • ? - 一个可选的空间
    • \d - 一位数
  • \b - 尾随词边界。