Как создать шаблон регулярного выражения для конкретного шаблона в файле json в Scala - PullRequest
0 голосов
/ 17 марта 2019

Я пытаюсь создать шаблон регулярного выражения, соответствующий шаблону в файле Json.Файл Json состоит из следующих типов шаблонов - Примеры

  • “raw”: “”\\""

  • “raw”: “true”

  • “raw”: “”’""

необработанный атрибут может иметь любой тип значения между двойными кавычками.Я хочу сопоставить все шаблоны, подобные этой, и заменить их на «*» одинаковой длины в этом месте.

Я создал шаблон “”"“raw”:(".*")""".r, который нормально работает в редакторе, но не в Scala, и он даетполная строка после raw.

Как мне этого добиться?

1 Ответ

0 голосов
/ 17 марта 2019

Заменив часть сопоставленного рисунка звездочками той же длины, что и часть рисунка, вы можете использовать решение типа

val s = "Text here, \"raw\": \"Remove\" and here"
val rx = "(\"raw\":\\s*\")([^\"]+)(\")".r
val res = rx.replaceAllIn(s, m => m.group(1) + ("*" * m.group(2).length) + m.group(3))
println( res ) // => Text here, "raw": "******" and here

Регулярное выражение

(\"raw\":\\s*\")([^\"]+)(\")
|___ Group1 ___||_ G2 _||G3|

Соответствует и захватывает в Группу 1 (благодаря вводимым скобкам) ​​"raw": и затем 0+ пробелов (с \s*), затем захватывает в Группу 2 любой один или несколько символов, отличных от ", изатем вводит в группу 3 двойные кавычки.

С помощью ReplaceAllIn вы можете передать данные совпадения в лямбда-выражение, где вы можете манипулировать совпадением до того, как произойдет замена.Так, m - это объект соответствия, m.group(1) - это значение группы 1, m.group(2).length - длина значения группы 2, а m.group(3) здесь содержит " char, значение группы 3.

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