正则表达式:确切的位数和任意数量的其他(预定义)字符

时间:2017-08-02 13:12:56

标签: regex pattern-matching regex-lookarounds

电话号码正好是11位,但其中可能还有其他可读符号,如空格,括号或连字符。

是否可以将这些数字与一个正则表达式相匹配? 没有任何编程方法,只需正则表达式。例如。以下所有数字应匹配:

  • 71234567890
  • 7 123 4568790
  • 7(123)4567890
  • 7(123)456-78-90
  • 7(123)456-7890

我怀疑它可能与积极前瞻有关。正则表达式可能会检查是否有11位数字,然后检查所有其他符号是否来自某个集合。但我还没有找到解决方案,所以任何想法都会受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。以及在StackOverflow上执行此操作的各种有趣且好的方法。当然,你可以只计算数字,(忽略大量和反对),很多很酷的方式。可能没有一种“最好”的方式,如果你使用的语言可能已经存在一个模块。

如果您只是有一个带有额外内容的数字列表,并且您知道这是“电话”列表,我会删除所有非数字,看看您是否获得11个数字。以下是Python中的一个示例:

import re

thelist = [
"71234567890",
"7 123 4568790",
"7(123)4567890",
"7 (123) 456-78-90",
"7(123) 456-7890",
]

for phone_dirty in thelist:
     phone_clean = re.sub("\D", "", phone_dirty)
     if len(phone_clean) == 11:
        print(phone_clean + " is a phone number")
     else:
        print(phone_clean + " is not a phone number")

您可以检查计数或进行其他类型的验证。真的有很多方法可以做到这一点,这只是一个。

答案 1 :(得分:0)

\d[\(\)\-]?\d[\(\)\-]?\d[\(\)\-]?\d[\(\)\-]?\d[\(\)\-]?\d[\(\)\-]?\d[\(\)\-]?\d[\(\)\-]?\d[\(\)\-]?\d[\(\)\-]?\d[\(\)\-]?\d[\(\)\-]?

实际上,

\d[\(\)\-]?

重复12次