заменить шаблон в строке (если существует) - PullRequest
1 голос
/ 24 июня 2019

Я хотел бы удалить шаблон из строки (если шаблон существует).Это выглядит так: «_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 Ответ

4 голосов
/ 24 июня 2019

Вы можете использовать

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

Или, если не может быть _<digits> до _c, используйте этот вариант:

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

См. Демонстрационную версию regex и график регулярных выражений :

enter image description here

Подробности

  • (?:_[0-9]+)+ - одно или несколько повторений последовательности _ и 1+ цифр (если не может быть _<digits> до _c, замените последний + на *, чтобы соответствовать 0 или более повторения)
  • _c - подстрока _c
  • (?=\.[^.]+$) - за которой сразу следует . и 1+ символов, отличных от . до концастроки

Scala:

val text: String = "file-client-and-reports_20190512_010012_c.csv"
val text2 = text.replaceAll("""(?:_[0-9]+)+_c(?=\.[^.]+$)""","")
println(text2)
// => file-client-and-reports.csv

См. онлайн демо

...