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

PySpark中如何将连续多个下划线替换为单个下划线?

问题描述

在PySpark环境中处理表时,我们会将各类特殊字符替换为下划线,但连续的特殊字符会生成连续多个下划线(例如"This###is####annoying"会被转换为"this___is____annoying",期望结果是"this_is_annoying")。字符串中可能存在任意长度的连续特殊字符,进而产生任意长度的连续下划线。现有SQL示例如下:

INSERT INTO tabC(something dumb) 
    SELECT 'This###is####annoying' 

期望输出:

"This_is_annoying"

能否用regexp_replace或类似方法,将任意长度的连续下划线替换为单个下划线?

解决方案

当然可以用regexp_replace实现,直接通过正则表达式匹配任意长度的连续下划线,替换成单个下划线即可。

PySpark SQL 实现示例

如果还没完成特殊字符转下划线的操作,可以嵌套两次regexp_replace一步到位;如果已经完成了特殊字符转下划线,只需要执行第二次替换:

INSERT INTO tabC(something_dumb) 
SELECT regexp_replace(
    -- 第一步:将所有非字母数字的特殊字符替换为下划线
    regexp_replace('This###is####annoying', '[^a-zA-Z0-9]', '_'),
    -- 第二步:将连续下划线替换为单个下划线
    '_+', '_'
) AS cleaned_str;

执行后会得到目标结果:"This_is_annoying"

关键说明

  • 正则表达式_+用于匹配1个及以上的连续下划线,不管连续下划线的长度是多少,都会被替换成单个下划线。
  • 若你的字段已经完成特殊字符转下划线的处理,直接调用regexp_replace(你的字段名, '_+', '_')就能完成连续下划线的合并。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:39:53