在python脚本中查找电话号码

发布于 2021-01-29 19:35:12

以下python脚本允许我使用正则表达式从给定文件中抓取电子邮件地址。

我该如何添加才能获得电话号码?说,是7位还是10位(带区号),还要加上括号吗?

我当前的脚本可以在下面找到:

# filename variables
filename = 'file.txt'
newfilename = 'result.txt'

# read the file
if os.path.exists(filename):
        data = open(filename,'r')
        bulkemails = data.read()
else:
        print "File not found."
        raise SystemExit

# regex = something@whatever.xxx
r = re.compile(r'(\b[\w.]+@+[\w.]+.+[\w.]\b)')
results = r.findall(bulkemails)
emails = ""
for x in results:
        emails += str(x)+"\n"

# function to write file
def writefile():
        f = open(newfilename, 'w')
        f.write(emails)
        f.close()
        print "File written."

正则表达式的电话号码:

(\d{3}[-\.\s]\d{3}[-\.\s]\d{4}|\(\d{3}\)\s*\d{3}[-\.\s]\d{4}|\d{3}[-\.\s]\d{4})

电话号码的另一个正则表达式:

(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?
关注者
0
被浏览
127
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如果您对学习正则表达式感兴趣,可以尝试自己编写。它并没有想象中那么难。诸如RegexPal之类的网站允许您输入一些测试数据,然后针对该数据编写和测试正则表达式。使用RegexPal,尝试添加您希望找到的各种格式的电话号码(带有括号,区号等),获取Regex备忘单,然后查看可获得的距离。如果没有别的,它将有助于阅读别人的表情。

    编辑:这是Regex的修改版本,它还应该匹配缺少连字符,空格或点的7位和10位电话号码。我在字符类([]
    s)之后添加了问号,这使得其中的任何内容都是可选的。我在RegexPal中对其进行了测试,但是由于我仍在学习Regex,因此我不确定它是否完美。试试看。

    (\d{3}[-\.\s]??\d{3}[-\.\s]??\d{4}|\(\d{3}\)\s*\d{3}[-\.\s]??\d{4}|\d{3}[-\.\s]??\d{4})
    

    它与RegexPal中的以下值匹配:

    000-000-0000
    000 000 0000
    000.000.0000
    
    (000)000-0000
    (000)000 0000
    (000)000.0000
    (000) 000-0000
    (000) 000 0000
    (000) 000.0000
    
    000-0000
    000 0000
    000.0000
    
    0000000
    0000000000
    (000)0000000
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看