上个月运营给我一份从 CRM 导出的文本,1800 多条客户反馈,每条前面跟着订单号和工单号,中间还夹着快递单号、邮箱和收件地址。她要的是里面所有手机号,用来核对一份活动名单。我一开始用记事本加手工复制,两小时才弄了 400 条,还错了两次:一次把 11 位的订单号当成手机号抄走,一次漏掉一整行,因为那个号码紧跟在"电话"两个字后面、没有分隔符。到第三批我才换了做法。
一、手工挑的失败率比想象中高
| 做法 | 1800 条的耗时 | 我能查出来的错误 |
|---|---|---|
| 记事本逐条复制 | 约 2–3 小时 | 漏行、把订单号当号码、粘错行 |
| 表格软件里用公式定位 | 约 40 分钟 | 字段黏在同一行时抓不到位置 |
| 按规则批量提取再抽查 | 约 5 分钟加 10 分钟抽查 | 剩下的是格式类问题,一眼能看出来 |
差别不只在快。手工抄写会产生"漏一行、错一行"这类最难发现的错误,而批量提取的错误是格式性的,可以靠排序和抽查一次性暴露出来。
二、规则提取的命中是有边界的
这类工具靠格式匹配,常见内置规则是:手机号取 1 开头的 11 位数字,邮箱按 xxx@xxx.xxx,URL 按 http 或 https 开头,IP 是 IPv4 四段,身份证是 18 位(末位可以是 X),另外还能整出纯数字和英文单词。规则一旦是这样写的,就一定同时存在误命中和漏命中:
- 误命中:以 1 开头、正好 11 位的订单号、快递单号、条码片段都会被认成手机号。我那次翻车就在这一条。
- 漏命中:写成
138-0013-8000或+86 13800138000的,中间有分隔符就连不成 11 位;座机号是区号加 7–8 位,压根不在手机号规则里。 - 历史格式:15 位的老身份证号不会被 18 位规则命中。数据里有早年录入的,必须单独处理,否则你会以为"这个人没留电话"。
- 纯数字类型是双刃剑:勾了提取数字,金额、编号、日期、数量会一起出来,1800 条文本能给你几千行结果。想不清要哪一类就先别勾它。
三、我实际怎么做
- 把源文本贴进文本信息提取,只勾"手机号"。这次提出 1627 条,勾上去重后剩 1541 条,也就是有 86 个号码在多条反馈里重复出现——这个差值本身就是个信息,说明名单里有同一客户被录了两遍。
- 结果按前缀排序再扫一遍,把不像号码的挑掉。以
100、1300打头的长串里混着十来个订单号,人工剔了 13 条。 - 格式不规整的那部分(带横线、带国际区号),我先把分隔符批量去掉重跑一次,比写复杂规则省事。
- 规则拿不准时,先在正则表达式测试里把匹配高亮和分组结果看清楚,确认命中的究竟是哪几段,再决定要不要用于全量。内置类型覆盖不到的模式(比如
WO-2026-0001这种工单号),我是先按数字或英文单词整批提出来,再用批量查找替换按前缀过滤。 - 交付前用隐私信息遮掩处理一份对外版本,把手机号中段遮掉再发到群里,避免完整号码在聊天记录里留下第二份拷贝。
四、换成日志场景,同一套做法更省事
后来我把这套流程用在了一次访问日志排查上。站点前半夜被扫,我从 3 个小时的 access.log 里先按时间切出可疑段落,再提取 IPv4 地址,拿到 214 个来源 IP;按出现次数排序后,19 个 IP 占了绝大部分对 /wp-login.php、/admin/、.env 这类路径的探测,剩下 195 个基本是正常访问。整个过程不到二十分钟,其中真正需要人工的部分只有"排序看头部"那一步。
同一批文本我还顺手提了一次 URL,用来核对这些请求打的路径是不是都在我预期的清单里。两次提取的结果对不上时,通常是日志字段格式变了,这个反差本身就是一个不错的自检信号,比闷头信任结果要可靠。
五、几个容易忽略的细节
- 提取结果不是数据真相:格式匹配只说明"这串像手机号"。合并回原表要靠订单号这种不会重复的字段,不要靠行号,一排序就全错位。
- 去重要想清保留哪条:同一号码对应不同客户的情况确实存在,条数变少不代表可以删源记录。
- 处理位置比功能多少更重要:客户手机号、身份证号这类文本我不会上传到任何后端,本地处理是我挑工具的第一条。
- 日志要先切片:几十兆的 access.log 直接贴进文本框并不现实。我的做法是先按时间取一天、再按状态码筛出可疑段落,剩下的量才适合做提取。
- 三份留痕:源文本、提取结果、人工剔除清单都存着。事后有人问"为什么少了 86 条",能立刻答出来,不用重跑。
六、常见疑问
Q:批量提取的结果一定准吗?
不。它给出的是"符合格式"的集合,误命中和漏命中都得靠抽查处理。像 1800 条这种量级,我按 5% 抽查,如果命中集中在同一个前缀就加抽。
Q:为什么我那条手机号没被提出来?
九成情况是中间有分隔符或用了全角数字,少数是抄录时漏了一位、不足 11 位。先把文本统一成半角、去掉多余符号再跑一次。
Q:能不能只提邮箱,不混进链接里的 @?
分开跑:先只勾邮箱看一份结果,再只勾 URL 看一份,两份对比就能识别出被当成邮箱的链接片段。一次勾多项只会让问题更难定位。
Q:需要自定义规则时怎么办?
提取器本身覆盖的是内置那几类,越出这个范围就得靠正则去确认模式长什么样,再用批量查找替换那类工具按前缀过滤落地。别指望一个环节把所有事做完。
Q:结果一大堆重复怎么处理?
直接勾提取里的去重;需要再看重复项时,用排序去重类工具把重复的那部分单独抽出来,往往能顺带查见录入重复的源头。
Q:交付给别人时结果该怎么整理?
原始结果和去重后的结果两份都留着,中间那份剔除清单也一并交出去。分组我不在表格里手工筛,而是用排序去重类工具让重复项自己浮出来,谁被录了两遍一目了然。
那两个小时的手工复制教会我的是:这类活儿真正的成本在"错误很难被发现",而不是"手抄太慢"。批量提取解决慢的那一半,准确性的另一半要靠抽查、剔除清单和留痕补上。把它当流程的第一步而不是全部,才是它该有的位置。