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

PySpark中如何用正则移除数值与单位间空格(保留数字间空格)

PySpark 文本处理:移除数值与单位间的空格

现有代码

你当前使用的PySpark代码用于移除制表符并将descriptions列转为小写:

df.withColumn('new_descriptions', lower(regexp_replace('descriptions', r"\t+", '')))

需求说明

需要在现有处理基础上,移除数值与单位(kg、ml、l、g)之间的空格,但保留纯数字和带单位数字之间的空格:

  • 示例输入:'banha frimesa 450 gr' → 处理后:'banha frimesa 450gr'
  • 需保留的情况:'farinha de trigo especial 101 5kg' → 保持不变

修改后的代码

调整regexp_replace的正则表达式即可实现需求,最终代码如下:

df.withColumn(
    'new_descriptions',
    lower(
        regexp_replace(
            regexp_replace('descriptions', r"\t+", ''),
            r'(\d+)\s+(gr?|kg|ml|l)\b',
            r'\1\2'
        )
    )
)

正则表达式解释

  • (\d+):匹配一个或多个数字,作为捕获组1用于后续引用
  • \s+:匹配一个或多个空格
  • (gr?|kg|ml|l):匹配目标单位,gr?可匹配g或gr,其他单位直接匹配,作为捕获组2
  • \b:单词边界,确保匹配的是独立单位(避免误匹配包含这些字符的其他单词)
  • 替换为\1\2:将捕获的数字和单位直接拼接,去掉中间空格

示例验证

输入数据:

['banha frimesa 450 gr','manteiga com sal tourinho pote 200 g','acucar refinado caravelas pacote 1kg',
'acucar refinado light uniao fit pacote 500g','farinha de trigo especial 101 5kg']

处理后结果:

['banha frimesa 450gr','manteiga com sal tourinho pote 200g','acucar refinado caravelas pacote 1kg',
'acucar refinado light uniao fit pacote 500g','farinha de trigo especial 101 5kg']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:44:58