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

时间:2018-04-13 00:49:58

标签: scala apache-spark

以下是我的数据框列中的一些示例字符串 (负数和正数)

Current 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  |
+----------------------+

如何使用正则表达式将数字替换为PID999999999

我知道regexp_replace可以在以下

中使用
dataframe.withColumn("PID", regexp_replace(col("PID"), "regular expression", "999999999"))

正确的regular expression模式字符串应该是什么?

2 个答案:

答案 0 :(得分:0)

我明白了。感谢所有的反馈。 只有在PID之后才出现数字时,"-\\d+|\\d+"才有效。例如abc.PID-12345.cdf。但当PID看起来像abc12.PID-12345.cdf22

时,它将替换所有数字

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

dataframe.withColumn("RecipientID", regexp_replace(col("PID"), "(?<=PID)[^\\.]+", "999999999"))

答案 1 :(得分:-1)

regexp_replace可能就是你要找的东西。你可以这样做,

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

希望这有帮助。干杯