我想从字符串中删除一个模式(如果出现模式)。看起来像:“ _ 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方法,但寻找的是通用规则。
答案 0 :(得分:4)
您可以使用
(?:_[0-9]+)+_c(?=\.[^.]+$)
或者,如果在_<digits>
之前没有_c
,请使用以下变体:
(?:_[0-9]+)*_c(?=\.[^.]+$)
详细信息
(?:_[0-9]+)+
-_
和1+个数字序列的一个或多个重复(如果_<digits>
之前不能有_c
,请替换最后一个{{1} }与+
匹配 0个或更多重复)*
-一个_c
子字符串_c
-紧随其后的是(?=\.[^.]+$)
和除字符串.
以外的1+个字符斯卡拉:
.
请参见online demo