Pyspark:Regex_replace 引号之间的逗号

Pyspark: Regex_replace commas between quotes

我正在努力用 Pyspark 中的 regexp_replace 替换。我必须关注以下字符串列:

"1233455666, 'ThisIsMyAdress, 1234AB', 24234234234"

更好地了解字符串:

Id Address Code
1233455666 'ThisIsMyAdress, 1234AB' 24234234234

我接收和处理的所有字符串都是用逗号分隔的,就像开头的例子一样。不幸的是,我无法更改这种传送数据的格式。为了很好地处理数据,我想将引号之间的逗号替换为空。

唯一的要求是使用 regexp_replace

我已经尝试了下面的代码,还有更多。但是对于这些代码,逗号分隔也会中断。然后字符串是一个大字符串,去掉了逗号。

.withColumn("ColCommasRemoved" , regexp_replace( col("X"), "[,]", ""))

这给了我这个输出:

"1233455666 'ThisIsMyAdress 1234AB' 24234234234"

我要实现的输出:

"1233455666, 'ThisIsMyAdress 1234AB', 24234234234"

使用regexp_replace:

from pyspark.sql import functions as F

df = spark.createDataFrame([("1233455666, 'ThisIsMyAdress, 1234AB', 24234234234",)], ["X"])

result = df.withColumn(
    "ColCommasRemoved",
    F.split(F.regexp_replace("X", ",(?=[^']*'[^']*(?:'[^']*'[^']*)*$)", ""), ",")
).select(
    F.col("ColCommasRemoved")[0].alias("ID"),
    F.col("ColCommasRemoved")[1].alias("Address"),
    F.col("ColCommasRemoved")[2].alias("Code")
)

result.show()
#+----------+------------------------+------------+
#|ID        |Address                 |Code        |
#+----------+------------------------+------------+
#|1233455666| 'ThisIsMyAdress 1234AB'| 24234234234|
#+----------+------------------------+------------+

或者如果您想直接将原始列拆分为 , 并忽略引号内的内容:

result = df.withColumn(
    "split",
    F.split(F.col("X"), ",(?=(?:[^']*'[^']*')*[^']*$)")
)

result.show(truncate=False)
#+-------------------------------------------------+-----------------------------------------------------+
#|X                                                |split                                                |
#+-------------------------------------------------+-----------------------------------------------------+
#|1233455666, 'ThisIsMyAdress, 1234AB', 24234234234|[1233455666,  'ThisIsMyAdress, 1234AB',  24234234234]|
#+-------------------------------------------------+-----------------------------------------------------+