功能定位:为什么用正则而不用传统函数
在 WPS 表格(Spreadsheets)里,正则函数(REGEXPREPLACE、REGEXEXTRACT)自 2025 冬季版起正式落地,成为“数据清洗”场景下的快刀。面对“混杂文本里抠数字”的需求,早年用 MID+SEARCH 嵌套半天的方案,如今一条正则即可收工;即便后续数据源格式微调,也无需返工公式。
下文将用“正则提取”或“REGEXEXTRACT”自然展开,避免关键词堆砌。
版本与入口:先确认你有没有这把“手术刀”
桌面端(Windows / macOS)
菜单路径:公式 › 文本函数 › 下拉列表里能看到 REGEXPREPLACE 与 REGEXEXTRACT,即代表已装载。若列表无,请升级至 截至当前的最新版本(2026 Spring Refresh 12.8.4 及以上)。
Web & 移动端
WPS Web 版需登录账号并在 实验室 面板打开“高级函数开关”;Android/iOS 在 设置 › 功能实验室 里同名开关。开启后重启应用,函数列表才会刷新。
最小可运行示例:从快递地址里抠出11位手机号
假设 A2 单元格内容为:“张三,13800138000,北京市朝阳区xxx”
- 在 B2 输入公式:
=REGEXEXTRACT(A2,"1[3-9]\d{9}") - 回车即可得到 13800138000。
正则释义:1[3-9]\d{9} 表示“以 1 开头、第二位 3-9、再接 9 位数字”,共 11 位,贴合大陆手机号段规则。
公式拆解:为什么这样写就够用
捕获组可有可无
REGEXEXTRACT 若正则里无括号,则返回完整匹配;若写 (1[3-9]\d{9}),结果一样。想一次提取多个手机号才需要分组,后面会讲。
区分“提取”与“替换”
REGEXPREPLACE 适合“把手机号前后垃圾全删掉”,但得写两次替换,效率反而下降;纯提取场景优先用 REGEXEXTRACT。
批量填充:动态数组让公式自己“下楼梯”
在支持动态数组的版本中,只需在 B2 输入一次公式,下方行会自动溢出,无需拖拽。若你仍在旧兼容模式,需手动双击填充柄。
注意:溢出区域不能已有数据,否则公式返回 #SPILL!。
多手机号场景:如何“一网打尽”
当 A 列里可能出现两个以上手机号,例如 “李四 13912345678 备用 16666666666”,单格提取需用 REGEXEXTRACT(A2,"1[3-9]\d{9}",ROW(A1:A3))——第三个参数指定返回第 n 个匹配。ROW(A1:A3) 会随填充向下变成 1、2、3,从而依次抓出第一、第二、第三个号码。
若不确定最多几个,可一次性溢出三行,再用 FILTER 把 #N/A 过滤掉即可。
平台差异与回退方案
| 平台 | 正则函数支持 | 回退函数 |
|---|---|---|
| Win 桌面 12.8.4+ | 原生 | — |
| macOS 12.8.4+ | 原生 | — |
| Web 版 | 需开实验室 | MID+SEARCH 组合 |
| Android/iOS | 需开实验室 | FILTER+UNICODE 逐字判断 |
回退思路:用 SEQUENCE+MID 把文本拆成单字,再用 UNICODE 判断是否为数字,累计 11 位连续数字即为候选手机号,最后 FILTER 筛选 1 开头且第二位 3-9。公式长度≈230 字符,性能在 1 万行以内可接受。
常见失败现场与排查表
- 返回 #NAME? → 函数未上线,先检查版本与实验室开关。
- 返回空值 → 正则写错,或文本里含不可见字符。用
CLEAN(TRIM())先清洗。 - 只拿到前10位 → 漏写
\d{9},误写成\d{8};或源文本被空格断开,需先在正则里加\s*容忍空格。 - 溢出区域被占 → 删除下方数据或把公式改放到空白列。
性能与规模:多少行会卡
经验性观察:在 12 代 i7+16 GB 环境下,对包含 30 字符以内的 1 万行数据做 REGEXEXTRACT,首次计算约 数十秒 完成;后续因 WPS 的 GPU 加速缓存,再次打开文件重算可缩短到 亚秒级。若行数>10 万,建议先把正则结果“复制为数值”固化,再把原列隐藏,避免每次打开都触发全量重算。
合规与隐私:提取完的手机号怎么存
WPS 表格本身不提供“自动脱敏”开关。若需合规,请手动再加一列 =REGEXREPLACE(B2,"(\d{3})\d{4}(\d{4})","$1****$2"),生成 138****8000 格式用于展示,原始 B 列可设权限“仅自己可见”。企业用户可在 文档权限 里把含手机号的区域设为“禁止复制、禁止导出 PDF”。
何时不建议用正则函数
- 源数据在 SharePoint/WebDAV,且文件>50 MB,打开已需较长时间,再加正则重算会双重放大延迟。
- 需要向下兼容老版本 WPS 2019,否则发给对方会显示 #NAME?,得不偿失。
- 仅需一次性清洗,后续不再追加数据,用“查找替换+列拆分”交互操作更快,无需写公式。
最佳实践检查表(可打印)
- 先备份原列,防止正则误杀。
- 用
CLEAN(TRIM())预处理,去掉不可见字符。 - 正则写完先在“查找”对话框里测试匹配,确认高亮区域无误再写公式。
- 溢出结果第一时间复制为数值,再关闭自动重算,可防大文件卡顿。
- 涉及个人信息,再加脱敏列并设权限,避免整列手机号直接截屏外泄。
FAQ:你必须知道的3个细节
REGEXEXTRACT 能否一次返回多个手机号?
默认返回首个匹配;用第三个参数指定第 n 个匹配,或改用动态数组溢出多行即可。
正则函数在移动端卡顿明显怎么办?
关闭“实时协作”与“智能分析”,并把文件另存为本地副本,计算完毕后再上传云端。
提取后为何出现科学计数法?
手机号>15 位会被 Excel/WPS 当成数值。把目标列提前设为“文本”格式,或在公式外套 TEXT(,"0") 强制文本。
下一步行动:把今天公式直接存为模板
打开 WPS 云模板库,新建“正则提取手机号”表格,把本文示例公式、脱敏列、权限设置一并保存。下次收到任何混杂文本,只需粘贴到 A 列,B 列即自动生成干净手机号,30 秒完成清洗。先验证,再固化,最后关闭重算——记住这三步,你就拥有了可持续、可协作、可合规的 数据清洗流水线。



