真奇怪。使用Databricks,但是在使用replace_regex功能时得到两种不同的行为
%sql
select upper(regexp_replace('Test (PA) (1234) ', '[(]\d+[)]', '')) as result
返回我的期望:测试(PA)
:
%python
display(spark.sql("""select upper(regexp_replace('Test (PA) (1234) ', '[(]\d+[)]', '')) as result"""))
的回报:TEST (PA) (1234)
在两个不同的上下文中(spark sql和spark/python/pyspark),这些不应该是等价的吗?为什么第二个上下文不起作用?
您没有考虑字符转义规则。在Python中,您的\
被转换为单个,因此您的正则表达式更改为
[(]d+[)]
。你可以选择:
-
使用原始字符串
r"""select upper(regexp_replace('Test (PA) (1234) ', '[(]\d+[)]', '')) as result"""
-
双反斜杠:
[(]\\d+[)]
通过这些更改,它产生正确的结果