regex_replace中“ E”的含义是什么?

时间:2018-08-21 15:18:58

标签: regex scala apache-spark

在我们的项目中,我们使用Scala和Spark将数据从RDBMS上的表移至HDFS。在移动数据之前,我们在数据上应用“ regex_replace”以消除数据中的某些差异。下面是regex_replace:

regexp_replace(
    regexp_replace(
        regexp_replace(
            regexp_replace(
                regexp_replace(..., E'[\\n]+', ' ', 'g' ),
                E'[\\r]+', ' ', 'g'
            ),
            E'[\\t]+', ' ', 'g'
        ),
        E'[\\cA]+', ' ', 'g'
    ),
    E'[\\ca]+', ' ', 'g'
)

在每次E调用中,单引号之前的regexp_replace是什么意思?

1 个答案:

答案 0 :(得分:1)

'E'是SQL语法at least for PostgreSql的一部分。
它在SQL中用于能够使用反斜杠\来转义字符。

并且如果将这样的SQL字符串放在scala字符串(不是raw string)中,则需要对反斜杠进行反斜杠以获得文字反斜杠。

那么要使regex_replace函数中的正则表达式只看到一个文字反斜杠吗?

val sqlstring = "select regexp_replace(col1, E'\\\\s+','','g') as col1_without_whitespace from yourtable"

等效于:

val sqlstring = "select regexp_replace(col1, '\\s+','','g') as col1_without_whitespace from yourtable"

等效于:

val sqlstring = raw"select regexp_replace(col1, '\s+','','g') as col1_without_whitespace from yourtable"

可以找到{E'3}的SQL Fiddle测试“ E”