正则表达式替换so spark dataframe字符串列中的点字符

时间:2019-12-19 06:32:15

标签: regex scala apache-spark apache-spark-sql

当我尝试替换句号“。”时Spark(Scala)的一列中使用“-”将其替换为“-”

val df3 = df2.withColumn("Current Ver", regexp_replace(col("Current Ver"), "." ,"-"))
df3.show()

例如-如果某列包含“ 2.4.0”,则在执行命令后,其输出将显示为“ ------”。

2 个答案:

答案 0 :(得分:3)

您应该为此使用一个类。点表示正则表达式中的任何字符:

val df3 = df2.withColumn("Current Ver", regexp_replace(col("Current Ver"), "[.]" ,"-"))
df3.show()

另一种解决方案是用反斜杠转义点。

答案 1 :(得分:3)

不仅在Spark中,而且在几乎所有曾经创建的Regex引擎中,句号都是一个特殊字符,表示“匹配 any 字符”。如果您不想使用句点的特殊含义,则需要使用转义符对其进行转义,在Spark和几乎所有其他Regex引擎中,转义符都是反斜杠。

由于您将正则表达式作为字符串传递,并且反斜杠也是字符串中的转义字符,因此您需要对反斜杠本身进行转义,以使其在字符串中失去其特殊含义:

val df3 = df2.withColumn("Current Ver", regexp_replace(col("Current Ver"), "\\." ,"-"))

或者,您也可以使用raw字符串内插器,它不处理转义字符:

val df3 = df2.withColumn("Current Ver", regexp_replace(col("Current Ver"), raw"\." ,"-"))