首页 > 解决方案 > python中联系人的正则表达式

问题描述

我有一个字符串,其中包含包括联系人在内的数据。一些联系示例是“+92 42 111-865-865”、“(+92) 42 3256 0445”、“03325138889”、“0332 5138889”、“+92 332 5138889”、“+92 3325138889”。我需要为联系人创建一个正则表达式

我尝试了一些正则表达式,但在同一字符串中还有一些其他数据,例如:“48358982872144”、“100220100”、“36470002”。我的正则表达式错误地将这些列为联系人。

 import re
 strdata = " Some Data here "
 contactRegex = re.compile("^[+][(][0-9][0-9][)]|[+][0-9][0-9]|[0,4]|[-/0-9]*$")
 contactlist = contactRegex.findall(strdata)

标签: pythonregex

解决方案


为了匹配您的示例数据,您可以使用:

^(?:(?:\(\+92\)|\+92) (?:42|332)|0332) ?\d+(?:([ -])\d+(?:\1\d+)*)?$

解释

  • ^字符串的开始
  • (?:非捕获组
    • (?:\(\+92\)|\+92))匹配 +(92) 或 +92
    • (?:42|332)匹配空间和选项之一
    • |或者
    • 0332从字面上匹配
  • )关闭非捕获组
  • ?\d+匹配可选空格和 1+ 位数字
  • (?:非捕获组
    • ([ -])在第 1 组中捕获空格或点
    • \d+(?:\1\d+)*匹配 1+ 个数字并重复 0+ 次匹配第 1 组中捕获的内容,使用反向引用来获得一致的空格或连字符而不是组合
  • )?关闭非捕获组并使其可选
  • $字符串结束

正则表达式演示


推荐阅读