当我尝试替换句号“。”时Spark(Scala)的一列中使用“-”将其替换为“-”
val df3 = df2.withColumn("Current Ver", regexp_replace(col("Current Ver"), "." ,"-"))
df3.show()
例如-如果某列包含“ 2.4.0”,则在执行命令后,其输出将显示为“ ------”。
答案 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"\." ,"-"))