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

PySpark如何通过正则删除列字符串任意位置含final的行

PySpark 过滤指定列任意位置含目标词的行实现方案

原有代码问题

你当前使用的正则(?i)^*final$存在两个核心问题,导致无法匹配中间、末尾出现final的场景:

  • 正则里的^是字符串起始锚点、$是字符串结束锚点,加了这两个符号后,正则只会匹配整串完全符合规则的内容,无法覆盖子串出现在中间的情况
  • ^*属于语法错误,量词*必须跟在可匹配的字符/表达式后,不能直接接在起始锚点^后面

正确实现代码

你需要匹配任意位置的final子串时,不需要加任何位置锚点,直接写目标子串即可;如果要过滤删除匹配到的行,对匹配结果取反即可。

场景1:不区分大小写,匹配所有位置含final子串的内容

该场景会识别所有包含final的字符串,包括final作为其他词组成部分的情况,比如finally、finalize:

from pyspark.sql.functions import col

# 过滤删除COLUMN列任意位置出现final(不区分大小写)的行
df = df.filter(~col("COLUMN").rlike("(?i)final"))

场景2:仅匹配独立的final单词,避免误匹配含final词根的其他词

如果不需要匹配finally/finalist/finalize这类把final作为词根的词,给目标词加单词边界即可,注意PySpark字符串里反斜杠需要双写转义:

from pyspark.sql.functions import col

# 仅匹配独立单词final,不会误判带final词根的其他词汇
df = df.filter(~col("COLUMN").rlike("(?i)\\bfinal\\b"))

注:(?i)是正则的不区分大小写匹配标记,如果你需要严格区分大小写,直接去掉这个标记即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:03:20