我试图从许多电子邮件文件中提取电话号码。我写了正则表达式代码来提取它们,但我得到的结果只有一种格式。
PHONERX = re.compile("(\d{3}[-\.\s]??\d{3}[-\.\s]??\d{4}|\(\d{3}\)\s*\d{3}[-\.\s]??\d{4}|\d{3}[-\.\s]??\d{4})")
phonenumber = re.findall(PHONERX,content)
当我查看数据时,我发现电话号码的格式很多。
如何提取所有具有这些格式的电话号码:
800-569-0123
1-866-523-4176
(324)442-9843
(212) 332-1200
713/853-5620
713 853-0357
713 837 1749
此链接是数据集的示例。问题是有时电话号码正则表达式从messageId和电子邮件中的其他号码中提取 https://www.dropbox.com/sh/pw2yfesim4ejncf/AADwdWpJJTuxaJTPfha38OdRa?dl=0
答案 0 :(得分:0)
您不需要使用逻辑OR包含所有可能性。您可以使用以下正则表达式:
(?:\(\d+\)\s?\d*|\d+)([-\/ ]\d+){1,3}
请参阅Demo
与re.findall()
一起使用时,请使用未捕获的组:
(?:\(\d+\)\s?\d*|\d+)(?:[-\/ ]\d+){1,3}
答案 1 :(得分:0)
您可能想要使用:
\(?(?:1-)?\b[2-9][0-9]{2}\)?[-. \/]?[2-9][0-9]{2}[-. ]?[0-9]{4}\b
这将匹配您的所有示例+忽略误报,例如:
113 837 1749
222 2222 22222