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

PySpark使用split分割字符串时报Unclosed character错误如何解决

报错原因

split函数的第二个参数为正则表达式,[、]是正则的保留字符,直接写],[会被识别为正则语法符号,而非普通匹配字符,因此触发“未闭合字符类”报错,正则中需要对这类特殊字符转义后使用。
Spark SQL的字符串中写正则转义需要用双反斜杠,]和[的正确转义写法为\\]、\\[,对应你需要的分隔符就是\\],\\[。

完整处理代码

你不需要提前区分两类数据格式,用统一的处理逻辑即可得到目标结果:

selectExpr 写法

df = df.selectExpr("""
  transform(
    split(regexp_replace(col, '^\\[+|\\]+$', ''), '\\],\\['),
    x -> regexp_replace(x, '^["\']|["\']$', '')
  ) as col
""")

PySpark 函数API写法

from pyspark.sql.functions import regexp_replace, split, transform

df = df.select(
  transform(
    split(regexp_replace("col", r"^\[+|\]+$", ""), r"\],\["),
    lambda x: regexp_replace(x, r'^["\']|["\']$', "")
  ).alias("col")
)

处理逻辑说明

  • 第一步先移除字符串首尾所有的[、]符号,两类输入处理后分别变为"A"],["B"和"A","B"
  • 第二步用\\],\\[作为分隔符拆分:第一类数据拆分后得到["A", "B"],第二类数据不存在匹配的分隔符,拆分后仍为单元素数组["\"A\",\"B\""]
  • 第三步遍历数组每个元素,移除元素首尾的引号,最终两类数据都会输出["A", "B"]的标准数组格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:09:03