excel表格里混着「张三20200615看看看」「李四06152021去去去」这类文本,想把里面的数字单独拆出来放到旁边列,最快的处理方法分两种:数据少用快速填充,数据量大就用公式。本次演示操作软件是微软excel,如果你用wps或者旧版excel,最好先确认下对应的函数、快捷键能不能正常支持。
下面主要演示公式法,它的好处是原始数据修改之后,提取出来的数字列会自动同步更新;要是你只是临时清洗一次数据,第一条结果算出来之后直接按 Ctrl+E 触发快速填充也能搞定。
第一步:整理原始文本和结果列
把混了数字的混合文本统一放到同一列,旁边新建一列命名为「数字」用来放提取结果。示例里C列是姓名和日期、编号混在一起的内容,D列专门放拆出来的数字。注意别直接覆盖原始数据,后面核对结果还要对着原内容校验。

第二步:先提取第一条数字
在第一条要输出结果的单元格里输入公式,让Excel从C2的混合文本里把连续数字挑出来。示例里得到的结果是 20200615,说明公式已经成功识别到文本中间的数字片段。公式比较长的话,建议先在第一行把逻辑调通再往下填充,别一上来就整列填写,避免全表出错不好排查。

第三步:向下填充整列
确认第一行的结果没问题,直接把公式往下拉填充整列就行。示例公式栏里用的是 =--LOOKUP(1,-MID(C2,SEARCH("?",C2),ROW($1:$100))) 这类写法:先定位文本里第一个数字的位置,再用 MID 逐段截取内容,最后靠 LOOKUP 返回能识别到的最长数字结果。

公式语法和参数怎么理解
这条不是单个函数,是多个函数组合使用的效果,它适合「文本中只有一段连续数字」的场景,比如姓名后面夹着日期、编号、手机号片段这类情况。
本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd、xlwt和xlutils模块。另外还演示了如何通过Tcl tcom包对excel操作。感兴趣的朋友可以过来看看
| 函数或片段 | 作用 | 本例写法 |
|---|---|---|
SEARCH("?",C2) |
定位 C2 中第一个数字的位置;这类教程公式里,问号用来触发数字位置查找逻辑 | 从混合文本中找到数字开始处 |
ROW($1:$100) |
生成 1 到 100 的长度序列 | 最多尝试截取 100 个字符 |
MID(C2,开始位置,长度) |
从指定位置开始截取文本 | 逐步截取可能的数字片段 |
LOOKUP(1,数组) |
在可计算结果中返回最后一个有效值 | 取到最长的数字片段 |
-- |
把文本型数字转成真正的数值 | 方便后续排序、比较或者做计算 |
如果你用的是Microsoft 365,已经支持正则函数的话,公式可以写得更短:=REGEXREPLACE(C2,"[^0-9]","")。作用是把所有非数字的字符全删掉,只留数字;要是提取出来的结果后续要参与计算,就写成 =VALUE(REGEXREPLACE(C2,"[^0-9]",""))。
REGEXREPLACE 参数表
| 参数 | 是否必填 | 示例 | 说明 |
|---|---|---|---|
text |
必填 | C2 |
要处理的原始文本。 |
pattern |
必填 | "[^0-9]" |
匹配所有不是数字的字符。 |
replacement |
必填 | "" |
把匹配到的内容替换为空。 |
occurrence |
可选 | 省略 | 省略时替换所有匹配项。 |
case_sensitivity |
可选 | 省略 | 本例只处理数字,一般不用设置大小写规则。 |
常见错误和扩展用法
如果公式返回 #VALUE!,先检查对应的文本里是不是真的有数字,或者有没有混了好几段数字;要是返回 #NAME?,大概率是函数名拼错了,或者你当前用的Excel版本不支持正则函数。前面的传统组合公式更适合提取单段连续数字,正则公式适合把单个单元格里的所有数字全部合并保留下来。
需要保留小数点的话,把公式改成 =REGEXREPLACE(C2,"[^0-9.]","") 就行;只想提取第一段连续数字,就用 =REGEXEXTRACT(C2,"\d+");如果是要保留前导0的订单号、手机号、证件片段,先把结果列的格式设为文本,别急着用 VALUE 转成数值。
批量处理完之后,先抽查开头、中间、末尾的几条记录,确认没漏数字、也没把多个编号错合并到一起,再把数字列复制出来,选择性粘贴为值,之后删辅助列、移动表格都不容易把公式引用搞乱。










