替换字符串中的模式(如果存在)

时间:2019-06-24 08:33:54

标签: scala pattern-matching

我想从字符串中删除一个模式(如果出现模式)。看起来像:“ _ 20180301_010000_c”,其中数字表示时间戳,“ c”是附加标识符。

示例:

 val text: String = "file-client-and-reports_20190512_010012_c.csv"
 val text2 = text.replaceAll("[0-9]","").replaceAll("___c","")
 // incr_claim-party-contact-number___c.dat - result after first replaceAll
 // incr_claim-party-contact-number.dat - result after second replaceAll - ok!

我两次使用了replaceAll方法,但寻找的是通用规则。

1 个答案:

答案 0 :(得分:4)

您可以使用

(?:_[0-9]+)+_c(?=\.[^.]+$)

或者,如果在_<digits>之前没有_c,请使用以下变体:

(?:_[0-9]+)*_c(?=\.[^.]+$)

请参见regex demoregex graph

enter image description here

详细信息

  • (?:_[0-9]+)+-_和1+个数字序列的一个或多个重复(如果_<digits>之前不能有_c,请替换最后一个{{1} }与+匹配 0个或更多重复)
  • *-一个_c子字符串
  • _c-紧随其后的是(?=\.[^.]+$)和除字符串.以外的1+个字符

斯卡拉:

.

请参见online demo