• 业务背景

业务上用到手机号的场景有很多。过年过节,你总要给你的客户发个短信问候下吧!你有新的产品,也需要群发给你的客户吧!要做业务推广也需要大量的手机号码吧!如果有现成的CRM系统,可以导出数据成想要的格式。但你的信息很可能是公司小伙伴在网上复制下来的,也有很大可能通过某些途径从地下暗网买来的,含有大量杂质需要过滤。

不管手机号是给到电话营销人员还是短信机器人,你必须要对数据进行加工,提高通话或短信的效率和成功率。
比如说,短信机器人对数据格式的要求:
如下所示(数据纯属虚构):
0-1.png
逐行发送短信,一行一条。

你的数据实际情况:
0-2.png
如果只有几条,你可能一条一条复制,但如果有几千页呢?你要复制到什么时候?

  • 正则表达式

那怎么办呢,你可能想到搜索,但这并不是某个固定的手机号码,你搜索的关键词是什么?
.....
这个对于懂编程的人来说,写段代码提取出结果并不难,但如果你不懂编程,那几乎无从下手。
幸亏,有正则表达式这个东西,可以让工作变得超乎简单,正则表达式简单地说,就是你给它一个规则,它就会扫描指定的文本,完成你交待的任务。大体上可以完成3种任务。
1.判断文本中是否含有某些文字 2.查找某些文字内容 3.替换文本中某些文字内容。
那么,如果实现查找手机号的功能呢?工欲善其事,必先利其器。我们先下载一个工具:Regester。
1.png

这是个绿色软件,下载完后双击Regester.exe就可以打开。
1.png
将需要搜索的文本复制到[源文本]区中。

  • 提取手机号

在[模式]中输入规则文本:d{11}
2.png
点击[运行],可以看到右下区域的[结果]中出现了匹配的结果。
规则文本释义:
d 表示任意一个数字,注意:只能代表一个数字。
{11} 表示前面元素的重复次数,因为前面元素是d,所以这个{11}表示有11个d
但这个并不是手机号码的标准规则,因为目前手机号码的规则是:长度11位,第1位是1,第2位目前是3,5,7,8中的一位,上图中的第2,3条不是合法的手机号。
继续优化,在[模式]中输入规则文本:1d{10}
3.png
运行后,发现找不到288*了。
规则文本中的1表示固定的数字1,整个规则表示查找第1位必须是数字1,后10位必须是任意数字。
继续优化,在[模式]中输入规则文本:1[3578]d{9}
4.png
运行后,发现找不到128和191了。
规则文本中的[2578]表示从2578这4个数字中选1个,整个规则表示查找第1位必须是数字1,第2位必须从3578 四个数字中选1个,后9位必须是任意数字。
如果看明白了,我可以提取出某些特殊要求的手机号。比如说:
1)搜索4-7位是1090的手机号:
5.png
规则文本:1[3578]d1090d{4}
2)搜索最后1位号码是吉祥号8的手机号:
6.png
规则文本:1[3578]d{8}8

  • 转义字符

可能有人会问,而我们想搜索的不是数字而是d这样的文字,该怎么办呢?
首先,我们要认识反斜杠“”表示转义,转义表示跟在它之后的字符不再是以前的意义了,所以系统扫描到到反斜杠之后还会再扫描它的后一个字符,所以后面的d不再表示固定字母d,而是某个数字了。
所以说,这个反斜杠是个有“魔力”的字符,如果要去掉这个魔力也很简单,用“\”表示一个普通的反斜杠。
7.png
规则文本:\d
规则文本释义:
\ 表示一个反斜杠。
d 表示固定的字母d。
输出结果
匹配到的结果如何放到文本文件中呢,操作相当简单。在[结果]区中切换到[文本]页签,就可以将文本复制出来了。
8.png

如果您遇到了业务上的难题,欢迎留言或加QQ群319279669讨论。

标签: 技术, 业务, 正则表达式, 手机号

添加新评论