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

PySpark Databricks正则表达式:在指定位置添加双引号

PySpark正则表达式修复字符串格式问题

需求与数据示例

原始数据(DataFrame的value列):

abc,1,2,345,765,876,Kumar r,Raghvan ,04041996

# 第6个逗号后已存在双引号
abc,1,2,345,765,876,"sam Bailey,20541789

abc,1011,2,32,678,,,,,

预期输出:

abc,1,2,345,765,876,"Kumar r,Raghvan" ,04041996 

abc,1,2,345,765,876,"sam Bailey",20541789 

abc,1011,2,32,678,,,,,

需要实现:在第6个逗号之后、末尾数字段之前的内容前后添加双引号;若已有前引号,则补全后引号。

无效代码

此前尝试的正则替换未达成预期:

df_with_quotes = df.withColumn("data_with_quotes",regexp_replace(col("data"), r"((?:[^,],){6})([^\"].[^\"$])(,[^,]+$)", r'\1"\2"\3'))

可行解决方案

以下是修正后的PySpark代码,可同时处理无引号和已有前引号的场景:

from pyspark.sql.functions import col, regexp_replace

df_with_quotes = df.withColumn(
    "data_with_quotes",
    regexp_replace(
        col("value"),
        r"((?:[^,]+,){6})(\"?)([^,\d]+)(,[\d]+$)",
        r"\1\"\3\"\4"
    )
)

正则匹配逻辑:

  1. ((?:[^,]+,){6}):精准匹配前6个逗号分隔的字段,作为第一个捕获组保留原始内容
  2. (\"?):匹配可选的前双引号,后续统一替换为完整的引号包裹
  3. ([^,\d]+):匹配第6个逗号后、末尾数字段前的非数字非逗号内容,这是需要添加引号的核心部分
  4. (,[\d]+$):匹配末尾的逗号加数字段,保留原始内容

替换时直接给核心内容(第3组)前后加上双引号,自动覆盖已有前引号的情况;对于无匹配项的记录(如最后一行),正则不生效,保持原始内容不变。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:05:00