python - 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)
解决方案
为了匹配您的示例数据,您可以使用:
^(?:(?:\(\+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 组中捕获的内容,使用反向引用来获得一致的空格或连字符而不是组合
)?
关闭非捕获组并使其可选$
字符串结束
推荐阅读
- vba - 范围与规格有何不同?
- git - Git:将补丁添加到现有补丁系列
- c++ - 默认赋值运算符如何与字符串指针一起使用
- javascript - 我需要我的机器人忽略具有特定角色的用户的消息
- c# - 如何使用 ClientAssertion 定义 AuthorizationCodeTokenRequest
- java - 如何防止数组中的重复?
- latex - 如何在使用 rmarkdown/bookdown 时获取源代码元素的文本换行?
- angular - 单击按钮后,角度重定向到空白页面
- kivy - 如何从屏幕管理器在 kivymd 工具栏中进行回调?
- flutter - 无法在地图中添加多个数据