You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark使用regexp_extract提取含特殊字符文本中纯数字的问题

PySpark 自由文本列提取纯数字实现方案

原代码失效原因

你写的提取逻辑存在三处问题,无法得到预期结果:

  • 语法错误:列选择写法错位,df['freeText',r'(^[0-9])'] 方括号使用错误,且regexp_extract函数的括号未闭合,运行本身就会报错
  • 正则逻辑错误:^[0-9] 仅匹配字符串开头位置的单个数字,既无法匹配文本中间、末尾的数字,也无法提取多位连续数字
  • 场景适配错误:正则限定了仅匹配开头的数字,完全覆盖不了DH-09878877ABC、qwert9876788plk这类非数字开头、数字夹杂在字符/符号中的场景

正确实现代码

如果要提取文本中所有数字并拼接成完整账号,直接用正则替换把所有非数字字符清空即可,逻辑简单性能更好:

from pyspark.sql.functions import regexp_replace

df = df.withColumn(
    "acount_nbr",
    regexp_replace("freeText", r"[^0-9]", "")
)

针对你给出的三类样例数据,提取结果完全符合预期:

  • 输入DH-09878877ABC → 输出09878877
  • 输入9009898DEC → 输出9009898
  • 输入qwert9876788plk → 输出9876788

特殊场景说明:如果文本中存在多段分散的数字、你仅需要提取第一段连续数字,可以换用regexp_extract实现:

from pyspark.sql.functions import regexp_extract
df = df.withColumn(
    "acount_nbr",
    regexp_extract("freeText", r"(\d+)", 1)
)

该写法遇到DH-123ABC456这类内容时只会提取第一段数字123,不会拼接后续的456,可根据实际业务需求选择。

内容的提问来源于stack exchange,提问作者user12039174

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 21:48:10