正则表达式实现电话,固话,email查询

正则表达式实现电话,固话,email查询

缘起

最近开始学习正则表达式了,看着Python核心编程(第三版),想着要不做个寻找电话号码的程序吧!

说干就干,先造个例句。

# 导入正则表达式模块,目标字符串预处理
import re
s = "this is a book+86133-1234-5678是最好的地很好哦么:电话号码了blahblahblah@blah.com为什么是cai的作家010 8888 8888或jinitaimei.cai@figit-asia.com.cn者18234567891web看到了sbminiworld@small.net谢谢。"

image

这是一个藏满电话号码和email的字符串(当然这些号码都是假的)

好了,我们现在有个奇妙的句子,我们要揪出电话号码,就要用正则表达式(我的码呀,终于说到主题了!)来搜啦。

移动电话号码

# 适用于各种变态移动电话格式
re.findall('(?:\+86)?1[3|8][0-9]{1}[-| ]?\d+[-| ]?\d+',s)

image

这是个神奇的findall语句,里面的是电话号码的正常格式(我是萌新,做得不太好)。首先是个可有可无的+86,我在这里使用了(?:…)的方法把他圈了起来,再用’?'表示他没有人权。1是因为大部分电话开头都是一(吧)。[3|8]3或8作为第二位数字,开头最后一位是一位数字,用[0-9]{1}作为最后一个数字,[-| ]?(你认为下面是数字,还没有吧,这玩意不是数字,ko no 符号da!)是一个符号,以免一堆网站写成这样你还搜不出来,也有可能没有符号,所以写个?。然后是个不用解释的\d+,然后又是个[-| ]?,最后的几个数字照旧。

固定电话号码

# 适用于全球大多国家的固定电话号码
re.findall('\+?(?:[0-9]{1,86})?[\(|\(| |-]?[ ]?[0|8][0-9]{0,4}[\)|\)| |-]?[ ]?[0-9]{3,4}[ |-]?[0-9]{3,4}[ |-]?[0-9]{0,4}',s)

截屏2020-03-13下午10.16.04.png

就是个在移动电话查询的基础上增加了一些东西的东西。主要注意的的是[(|\(| |-]?是一起的,有可能是(、(、 ‘ ’ 或 -,另一边相仿。
这个正则表达式可以解决全球绝大多数国家的固定电话识别,问我为啥这么自信???我苦命,你们可以去问我程序员的爹,或者看文章最后的截图。

email查询

# 可以识别几乎所有email格式
re.findall('[A-Za-z0-9]{2,20}[-|.]?[A-Za-z0-9]{2,20}?@[A-Za-z0-9]{1,20}[-|.]?[A-Za-z0-9]{2,20}[-|.]?(?:[A-Za-z0-9]{2,20})?[-|.]?(?:[A-Za-z0-9]{2,20})?',s)

截屏2020-03-13下午11.10.27.png
电子邮件基本上是分两边而行,一边为@之左,一边为@之右。左边只用考虑字母数字和特殊符号,另一边要考虑到多少个点,多少个com,cn,name,net等,所以就比较麻烦。

最后想说点感受

让大家看看苹果全球网站的号码提取效果哈~

截屏2020-03-13下午11.15.17.png

Xnip2020-03-13_23-16-16.jpg
(打个广告,Xnip真好用)

刚刚开始学习,以上有问题的地方欢迎拍砖,不吝赐教。

打完,下课。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值