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
相关产品推荐
相关产品推荐

