正则表达式系列:
正则表达式1-提取手机号

  • 业务背景

上篇文章通过简单的正则表达式获得了客户系统的手机号,现在可能因为某些原因,要将文档分享给某些单位,但需要对手机号处理,隐藏某些位数的号码。
源文档:
1.png
需要生成的新文档:
2.png
你是否有种无从下手的感觉呢?别着急,我们一步步来。

先分析数据的规律:
1)公司名称:以中心和公司结尾。
2)手机号码:每个公司有1个或多个手机号码,以逗号,空格或回车分隔。
文档杂质数据太多,手机号位置不固定,单纯通过一个或多个正则表达式很难达到我们想要的目的。
对于一个复杂的任务,建议采用分步处理的方式,首先我们要将待处理的数据隔离出来。

注意,下面的操作会更新文档,千万别忘了备份你的文档!

这次我们使用强大的文本处理工具Notepad++,下载和使用方法可以去网上搜索一下,很简单。

3a.png

  • 标记公司名称

查找公司名称

查找公司名称,先要判断公司名称的依据是什么?
1.“甘李药业股份有限公司” 是公司名称吗?
2.“民营公司 | 制药/生物工程” 是公司名称吗?
3.“民营公司 | 制药/生物工程公司” 是公司名称吗?
你可能想,这还用说吗,肯定是第1个啊!可你依据什么来判断呢?根据文档,我们判断公司名称的依据是:以[中心]和[公司]结尾的中间没有空格的文本。
知道了判断公司名称的依据,就找到解决问题的思路!
打开文档,点击菜单项[搜索]->[查找],如图所示:
3b.png
[查找模式]选择:正则表达式
在[查找目标]中输入:.+中心|.+公司
规则文本释义:
. 表示任意一个字符,除了回车换行。

  • 表示前面元素重复至少一次,也就是说很多个字符。
    | 表示或者的意思,表示搜索中心结尾或公司结尾的文本串。

点击[查找下一个],文档中会高亮显示匹配出的文本,继续点击[查找下一个],会高亮匹配下一个符合的文本,点击[在当前文件中查找],会在文档下方列出所有匹配的文本行。
4.png

清除杂质

从列表中可以看出:有杂质数据,会影响公司名称的提取,必须先删除有“公司”的杂质数据。
先将公司名称中的公司替换成文档中不重复的一个词,如“工司”。
点击菜单项[搜索]->[替换],如图所示:
5.png
[查找模式]选择:正则表达式
在[查找目标]中输入:^(S+)(公司)$
[替换为]中输入:$1工司
查找规则文本释义:
^ 表示一行的开头,举例:^a 要求本行必须以a开头。
S 表示不能是空格或tab等不可见字符,s表示必须是空格或tab等不可见字符,注意大小写。
() 表示分组的意思,表示括号中的表达式是一个整体内容,在替换中有很大作用。
查找表达式的意思是:查找每行以多个非空白字符加上结尾是“公司”的字符串。
$ 表示一行的结尾,举例:b$要求本行必须以b结尾。
替换规则文本释义:
$1 表示查找字符串中的第1个组,查找字符串中的第1个组就是(S+),也就是“公司”文字前面的那些文本。
替换表达式的意思是:将每行找到的第1个组的文本加上“工司”两字组成新的文本。
点击[替换],执行效果如下:
6.png
如果发现替换结果出错了,可以在文本区域中点击,然后按ctrl+z回退。
也可以点击[全部替换],完成替换操作。
“民营公司...”这一行尽管是以“公司”接尾,但由于中间有空格,所以并未被替换。
接下来的操作就很简单了,在替换框中将查找模式切换为“普通”,查找目标输入“公司”,替换为输入“”,全部替换之后,杂质数据中的“公司”就被过滤了。

7.png
同样的操作,将“工司”全部替换为“公司”。
8.png

打标记

接下来,给公司名称打标记。
9.png

在[查找目标]中输入:(.+中心|.+公司)
[替换为]中输入:【$1】
给每一行以中心或公司结尾的文本前面加上【,后面加上】。

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

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

添加新评论