如何从格式不统一的[Description]列中提取末尾序列数字
你可以根据自己使用的工具,选择对应的正则提取函数实现需求,核心匹配规则是抓取字符串末尾最后一组连续8位数字,自动忽略末尾多余的非数字字符,适配你给出的格式不统一的场景。
Excel/WPS 场景
如果是支持正则函数的版本,直接使用REGEXEXTRACT,公式如下:
=REGEXEXTRACT(对应单元格, "\d{8}(?=[^\d]*$)")
如果使用的旧版Excel不支持正则函数,可以用嵌套函数数组公式实现,输入后按Ctrl+Shift+Enter生效:
=MID(对应单元格,MAX(IFERROR(FIND(ROW($1:$9),对应单元格,ROW($1:$100)),0))-7,8)
SQL 场景
不同数据库的正则提取函数语法略有差异:
- MySQL:使用
REGEXP_SUBSTR
SELECT REGEXP_SUBSTR(Description, '[0-9]{8}', 1, REGEXP_COUNT(Description, '[0-9]{8}')) AS extracted_num FROM 你的表名;
- PostgreSQL:使用
substring
SELECT substring(Description FROM '(\d{8})[^0-9]*$') AS extracted_num FROM 你的表名;
- Hive/Spark SQL:使用
regexp_extract
SELECT regexp_extract(Description, '(\\d{8})[^0-9]*$', 1) AS extracted_num FROM 你的表名;
Python Pandas 场景
使用str.extract方法实现批量提取:
import pandas as pd df['extracted_num'] = df['Description'].str.extract(r'(\d{8})[^\d]*$')
以上方案匹配你给出的3条示例记录,输出结果和你预期的完全一致。
内容的提问来源于stack exchange,提问作者Pak telo
相关产品推荐
相关产品推荐

