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

Scala SQL中如何转义反斜杠与双引号为正则适配contains匹配

问题根因
  • org.apache.spark.sql.Column.contains()是字面量子串匹配方法,不接收正则表达式,只需要按照编程语言的字符串转义规则传入要匹配的真实子串即可,不需要额外做正则转义。
  • 你之前写法失效的核心原因是转义错误:
    • 写"\"\""时,只对双引号做了转义,没有转义反斜杠,实际传入的匹配内容是两个连续双引号"",完全不包含反斜杠,自然匹配不到目标行。
    • 用单引号包裹内容的写法不符合Scala语法:Scala中单引号用于定义单个Char字符,无法传入多字符的字符串,逻辑本身就不成立。
正确实现方案

优先推荐用Scala三引号原生字符串写法,完全不需要手动处理转义,不会写错:

// 三引号内所有字符按字面量解析,直接写要匹配的\"\"即可
filter(!$"KEY".contains("""\"\""""))

如果要使用普通双引号包裹字符串,严格按照转义规则书写即可:Scala中字面量反斜杠需要用\\表示,字面量双引号在双引号包裹的字符串中需要用\"表示,目标子串\"\"对应的转义后写法如下:

// 转义后实际传入的匹配子串为 \"\"
filter(!$"KEY".contains("\\\"\\\""))
转义正确性校验

可以在本地执行简单代码验证字符串内容是否符合预期:

// 三引号写法校验
val matchStr1 = """\"\""""
println(matchStr1) // 控制台输出: \"\"

// 普通双引号转义写法校验
val matchStr2 = "\\\"\\\""
println(matchStr2) // 控制台输出: \"\"

两种写法输出的匹配串完全一致,都可以正确过滤掉包含\"\"子串的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:45:32