python - 用 replace_regex 替换 pyspark 中的括号

标签 python regex pyspark expr

+---+------------+
|  A|           B|
+---+------------+
| x1|        [s1]|
| x2|   [s2 (A2)]|
| x3|   [s3 (A3)]|
| x4|   [s4 (A4)]|
| x5|   [s5 (A5)]|
| x6|   [s6 (A6)]|
+---+------------+
想要的结果:
+---+------------+-------+
|A  |B           |value  |
+---+------------+-------+
|x1 |[s1]        |[s1]   |
|x2 |[s2 (A2)]   |[s2]   |
|x3 |[s3 (A3)]   |[s3]   |
|x4 |[s4 (A4)]   |[s4]   |
|x5 |[s5 (A5)]   |[s5]   |
|x6 |[s6 (A6)]   |[s6]   |
+---+------------+-------+
当我应用下面的每个代码时,它们之前的括号和空格没有被替换:
from pyspark.sql.functions import expr
df.withColumn("C",
               expr('''transform(B, x-> regexp_replace(x, ' \\(A.\\)', ''))''')).show(truncate=False)
或者
df.withColumn("C",
               expr('''transform(B, x-> regexp_replace(x, ' \(A.\)', ''))''')).show(truncate=False)
得到的结果:
+---+------------+------------+
|A  |B           |value       |
+---+------------+------------+
|x1 |[s1]        |[s1]        |
|x2 |[s2 (A2)]   |[s2 ()]     |
|x3 |[s3 (A3)]   |[s3 ()]     |
|x4 |[s4 (A4)]   |[s4 ()]     |
|x5 |[s5 (A5)]   |[s5 ()]     |
|x6 |[s6 (A6)]   |[s6 ()]     |
+---+------------+------------+

最佳答案

您可以创建一个 UDF,从数组中删除与正则表达式 r"\(.*\)" 匹配的所有元素。 .如有必要,您可以更改正则表达式以匹配 r"\(A.\)"如果需要的话。

import re
replaced = F.udf(lambda arr: [s for s in arr if not re.compile(r"\(.*\)").match(s)], \
                 T.ArrayType(T.StringType()))
df.withColumn("value", replaced("B")).show()

关于python - 用 replace_regex 替换 pyspark 中的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62613949/

相关文章:

python - 使用 utf8mb4 连接到 mysql 5.7.9 数据库时出现问题

regex - 优化一个充满 '?' 的正则表达式

python - 将多个字典合并到pyspark rdd中的另一个字典

pyspark - 如何将消息写入 AWS Glue 上的输出日志?

python-3.x - Ubuntu 16.04 Docker容器中的PySpark开发环境

python - django Rest Framework - 带有自定义 ListView 和 URL 参数的 ViewSet

python - 如何在不考虑特殊字符且不区分大小写的情况下对字符串列表进行排序

javascript - 正则表达式忽略闭花括号和分号

python - tf.Session() 是否应该在 tf.Graph() 的上下文中?

javascript - 如何使用正则表达式进行嵌套匹配?