天天看点

找出大文档中的所有手机号

没有云山雾罩的技术名词,没有讳莫如深的互联网黑话;关注本专栏,IT技术不再深不可攀,技术细节小白也能读懂!

刚上班,小白就习惯性地打开淘宝,搜索特价打折商品。每天接听电话,传达文件这些无聊的工作他早就厌倦了。

正当他下单购买帆布鞋的时候,老板大踏步走了进来。他赶紧按下Boss键,手放在键盘上随意敲着,心里祈祷老板没看到自己在划水。

心诚则灵,小白的祈祷起作用了。老板说:“小白,我有一份客户文档,发到你的邮箱里了,你把文档中所有的手机号码都整理出来,交给小刘群发短信。时间比较紧,今天就要整理完啊!”

就整理几个手机号码,还用一天?小白觉得老板有点儿小题大做。可等他打开文档,他就不这么想了。

这文本文件有好几MB大,录入时完全没有标准,完全是一团乱麻。

节选:

李老板,上周醉仙楼,手机号13022229999

18911110022朱小莉

喜临门酒店13800001111周三有活动

小张15500112233,电话2890024

小张6月18日要送一批货,安排老谢去接!!

本月支出13800元

杨总新手机号,15899998888旧号月底不用了

这让惯用CTRL+CV大法的小白彻底乱了方寸。用鼠标点选吧,没规律,无从下手;用查找吧,每个手机号都不一样,怎么查?

无奈之下,小白只得手动复制手机号码,粘贴到另一个空白的文档中。

一直忙活到12点,累得丢了魂似的小白发现只整理了20%左右。还是先吃饭吧,他拖着疲惫的身躯下楼吃饭,感觉入职三个月所有的活加起来都没有今天干的多。

在吃饭的时候,小白忽然想起他的发小-小明。小明是程序员,请他帮忙写个程序应该能解决这个问题。

于是他给小明打电话,刚接通电话,小白就诉起苦来。

“小明,我今天遇到难题了,你不帮我的话,我就要累死在工作岗位了。”

小明:“什么难题?”

小白:“老板让我从一个文档里找出所有手机号,文档特别大,还不规范。我整理了一上午,累吐血了,只整理了一小部分。”

小明:“这简单啊,把手机号都查出来就行了。”

小白:“这怎么查,每个手机号都不一样。你能不能帮我写个程序,一下就把所有的手机号都给找出来!”

小明:“不用写程序,你安装个文本编辑器Notepad++,再按我说的做,不到一秒钟就能搞定!”

真有这么简单,小白有点儿不相信,Notepad++编辑器他早就装了,没有查手机号这么神奇的功能啊!

回到工作岗位,小白按小明的要求,用Notepad++打开该文档,并点击菜单【搜索】中的【查找…】,打开“查找”对话框。

找出大文档中的所有手机号

小明:“现在我们搜索13开头的手机号,你在【查找模式】选择【正则表达式】,查找目标中输入【13\d{9}】”

就凭这几个乱七八糟的文字能搜索出所有13开头的手机号?尽管怀疑,小白还是按小明要求操作了。

神奇的一幕发生了,果然,一个个13开头的手机号码被选中了,而且还完美避开了13800这样的非手机号数字。

找出大文档中的所有手机号

小白:“真神奇啊,那我要搜15开头的手机号呢?”

小明:“简单,只要将【13\d{9}】改成【15\d{9}】就可以了。”

找出大文档中的所有手机号

小白:“那如果我查170开头的呢?”

小明:“用【170\d{8}】就可以了!“

找出大文档中的所有手机号

小白:“这太好用了,能告诉我是怎么做到的吗?“

小明:”你说下手机号有什么规律?“

小白:“呃… … 都是数字,有11位… … 还有开头是13,150-153,155-159,18,170,171… …还有的号段记不清了”

小明:“好,先看13开头的,式子【13\d{9}】中,【13】表示13开头,【\d】表示任意一个数字,【{9}】表示前面的\d有九个,如果不用【{9}】,你需要9个\d来代替,结果是【13\d\d\d\d\d\d\d\d\d】“

小白:“原来是这样!“

小明:“再看170开头的,【170\d{8}】,它表示170开头,后面是8个\d,也就是8个数字,注意:这8个不一定是相同的数字。“

小白:“那如果我就想查17011111111,17022222222这样8位相同的号码呢?“

小明:“那就稍微复杂些了,用【170(\d)\1{7}】,【(\d)】表示170后面的第4位是任意一个数字,加上【()】表示将它存起来,继续向后找的时候还要用到它。“

小白:“哦…“

小明:“第5位的【\1】表示将刚存起来的那个数字再拿出来,后面的【{7}】表示,\1拿7次。“

找出大文档中的所有手机号

小白:“嗦滴斯耐…“

小白:“刚才15号段没排除154开头的号码,如果要排除,怎么办呢?“

小明:“这也简单,用【15[0-3,5-9]\d{8}】,【[0-3,5-9]】表示从0到3或者5-9这些数字中选一个。“

找出大文档中的所有手机号

小白:“小明,你真行!但我好像每次只能查一个号段,如果我要同时查这些号段,该怎么写?“

小明:“这就要将这些号段组合起来了,看终极完整版【(13\d{9})|(15[0-3,5-9]\d{8})|(17[0,1]\d{8})|(18\d{9})】。【|】表示或者的意思。在【|】前后的式子要加上【()】,这里的括号表示式子是一个整体。“

小白:“小明,今天我学到了不少新东西,但我觉得这解决不了我的问题!“

小明:“这怎么说…?“

小白:“我还需要将手机号一个个复制粘贴出来。工作量没有减轻多少啊!”

小明:“这一点,编辑器作者早就想到啦!你切换到【标记】对话框。”

找出大文档中的所有手机号

小明:“然后点击【全部标记】”

找出大文档中的所有手机号

小白:“啊,全部选中了,那怎么拷出来呢?”

小明:“只要点击【复制标记文本】,然后在新文档中粘贴就可以了。”

找出大文档中的所有手机号

小白:“我的天,果然不到1秒钟。这… 这个…我要是懂这个,何至于浪费一上午的时间啊。这个技术叫什么啊?”

小明:“这就是大名鼎鼎的正则表达式!!”

为您推荐:

找出大文档中的所有手机号

找出大文档中的所有手机号

继续阅读