Удалите вхождение обратной косой черты в строку, за которой не следует другая обратная косая черта или труба - PullRequest
0 голосов
/ 02 июля 2018

Нужна помощь в создании регулярного выражения, которое может работать с обратной косой чертой при следующих условиях.

1> если строка содержит обратную косую черту, за которой не следует другая обратная косая черта или канал подряд, чем я должен вернуть строку без обратной косой черты

2>, если строка содержит обратную косую черту и канал подряд, чем я не должен удалять обратную косую черту.

3>, если он содержит обратную косую черту, за которой следует другая обратная косая черта подряд (\\), чем я не должен удалять обратную косую черту.

scala> val str = """Sports\s"""
str: String = Sports\s

scala> str.replaceAll("""\\""", "")
res70: String = Sportss

scala> val str = """Sports\\s"""
str: String = Sports\\s

scala> str.replaceAll("""\\""", "")
res71: String = Sportss

scala> val str = """Sports\\|s"""
str: String = Sports\\|s

scala> str.replaceAll("""\\""", "")
res74: String = Sports|s

В приведенных выше тестах, если строка содержит одну обратную косую черту или комбинацию обратной косой черты и канала, обратное пространство полностью удаляется. Что я должен изменить для обработки случаев?


На основании моего предыдущего вопроса был дан рабочий ответ, но вот еще один случай, когда решение не работает.

scala> val str = "Spo\\rts\\s"
str: String = Spo\rts\s

scala> str.replaceFirst("""^([^\\|]*)\\([^\\|]*)$""", "$1$2")
res102: String = Spo\rts\s

ожидаемый результат должен быть без \

1 Ответ

0 голосов
/ 02 июля 2018

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

s.replaceAll("""(\\+[\\|])|\\""", "$1")

См. Демоверсию regex онлайн .

Детали шаблона

  • (\\+[\\|]) - Группа захвата 1:
    • \\+ - 1 или более \ символов
    • [\\|] - \ или | char
  • | - или
  • \\ - обратный слеш

Шаблон замены $1 вставит значение в группу захвата # 1.

См. Демоверсию Scala :

val p = """(\\+[\\|])|\\"""
println("""Sports\s""".replaceAll(p, "$1"))  // => Sportss
println("""Sports\|s""".replaceAll(p, "$1")) // => Sports\|s
println("""Sports\\s""".replaceAll(p, "$1")) // => Sports\\s
println("""Sports|\\s""".replaceAll(p, "$1"))// => Sports|\\s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...