如何使用正则表达式替换java/scala中的字符串值

如何使用正则表达式替换java/scala中的字符串值,scala,apache-spark,Scala,Apache Spark,下面是我在dataframe列中的一些示例字符串 (负数和正数) 当前数据帧如下所示 | PID | |abc.PID-12345.cdf | |abc.PID-12345678.xyz| |abc.PID123456789.abc| |xy.PID12345.def | |ak.PID21.ab | 我的预期输出如下 +----------------------+ | PID | +--------

下面是我在dataframe列中的一些示例字符串 (负数和正数)

当前数据帧如下所示

| PID                |
|abc.PID-12345.cdf   |
|abc.PID-12345678.xyz|
|abc.PID123456789.abc|
|xy.PID12345.def     |
|ak.PID21.ab         |
我的预期输出如下

+----------------------+
|      PID             |
+----------------------+
|  abc.PID999999999.cdf|
|  abc.PID999999999.xyz|
|  abc.PID999999999.abc|
|  xy.PID999999999.def |
|  ak.PID999999999.ab  |
+----------------------+
dataframe.withColumn("PID", regexp_replace(col("PID"), "regular expression", "999999999"))
如何使用正则表达式将数字替换为
pid99999999

我知道
regexp\u replace
可以用于以下情况

+----------------------+
|      PID             |
+----------------------+
|  abc.PID999999999.cdf|
|  abc.PID999999999.xyz|
|  abc.PID999999999.abc|
|  xy.PID999999999.def |
|  ak.PID999999999.ab  |
+----------------------+
dataframe.withColumn("PID", regexp_replace(col("PID"), "regular expression", "999999999"))

什么应该是正确的
正则表达式
模式字符串?

regexp\u replace
可能就是您想要的。你可以这样做

val df = ???
df.withColumn("PID",regexp_replace(col("PID"),"-\\d+|\\d+", "999999999"))

希望这有帮助。干杯

我明白了。感谢所有的反馈。
“-\\d+|\\d+”
将在PID后仅出现数字时工作。例如
abc.PID-12345.cdf
。但当PID看起来像
abc12.PID-12345.cdf22

更通用的方法是执行以下操作


dataframe.withColumn(“RecipientID”,regexp_replace(col(“PID”),”(?可以尝试:
dataframe.replaceAll(“-\\d+\\d+”,“999999999”)
。谢谢,@devilsHnd,这将起作用。但是,我忘了指出PID可能包含数字。例如abc1.PID-12345.cdf23,因此上面的正则表达式字符串将把每个数字替换为“99999999”。我算出了,我们可以这样做。使用列(“RecipientID”,regexp_替换(col(“PID”),”(?感谢您提供反馈。但是,此正则表达式字符串将替换每个数字为“999999999”