使用python 2.7 regex从电子邮件中提取电话号码

时间:2017-04-24 05:03:45

标签: python regex

我试图从许多电子邮件文件中提取电话号码。我写了正则表达式代码来提取它们,但我得到的结果只有一种格式。

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

2 个答案:

答案 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

Regex Demo and Explanation

Python Demo