这个问题在这里已经有了答案:
为什么sparksql在sql查询中需要两个文本转义反斜杠(1个答案)
7个月前关门了。
我知道\p{c}表示“不可见的控制字符和未使用的代码点”https://www.regular-expressions.info/unicode.html
当我这样做时,(在databricks笔记本中),它工作得很好:
%sql
SELECT regexp_replace('abcd', '\\P{C}', 'x')
但以下操作失败(包括%python和%scala):
%python
s = "SELECT regexp_replace('abcd', '\\P{C}', 'x')"
display(spark.sql(s))
java.util.regex.PatternSyntaxException: Illegal repetition near index 0
P{C}
^
sql命令在配置单元中也可以正常工作。我也试着摆脱这里建议的花括号,但没有用。
我还缺什么吗?谢谢。
1条答案
按热度按时间8iwquhpp1#
Spark-Sql Api:
尝试添加4个反斜杠以转义1\
```spark.sql("SELECT regexp_replace('abcd', '\\P{C}', 'x')").show()
//+------------------------------+
//|regexp_replace(abcd, \P{C}, x)|
//+------------------------------+
//| xxxx|
//+------------------------------+
spark.sql("SELECT string('\\')").show()
//+-----------------+
//|CAST(\ AS STRING)|
//+-----------------+
//| |
//+-----------------+
spark.sql("set spark.sql.parser.escapedStringLiterals=true")
spark.sql("SELECT regexp_replace('abcd', '\P{C}', 'x')").show()
//+------------------------------+
//|regexp_replace(abcd, \P{C}, x)|
//+------------------------------+
//| xxxx|
//+------------------------------+