Соответствие RegEx для обработки "" в JSON - PullRequest
0 голосов
/ 11 мая 2019

Regex для обработки заданного шаблона ввода с двойными кавычками

Input:

{
"adad":""Dip. Clinico E Di Ricerca Clinica-u.o.c.i Divisione ,gg677"","asd":"","dadd":"13213","Finance":[{"Financial_Contact_End_Date":""},{"Financial_Monthly_End_Date":""}]
}

Я пытался использовать это регулярное выражение для обработки предоставленного ввода.

a.replace("\"\"","\"").replaceAll("(:\",)",":\"\",").replaceAll("(:\"})", ":\"\"}")

a.replace("\"\"","\"").replaceAll("(:\",)",":\"\",").replaceAll("(:\"})", ":\"\"}")

Ожидается:

{
"adad":"Dip. Clinico E Di Ricerca Clinica-u.o.c.i Divisione ,gg677","asd":"","dadd":"13213","Finance":[{"Financial_Contact_End_Date":""},{"Financial_Monthly_End_Date":""}]
}

Как мне решить эту проблему?

Ответы [ 2 ]

1 голос
/ 11 мая 2019

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

Найти :""([^"]*)""
Заменить :"$1"

https://regex101.com/r/mjewq0/1

Осторожно, используйте этот метод, есть только один способ включить литерал "
внутри строки, и это избежать его \"

0 голосов
/ 12 мая 2019

Это регулярное выражение решит вашу проблему:

(("")(?!(,|})))|((?<!:)(""))

Объяснение:

Это регулярное выражение отлавливает все "" s, которые не заканчиваются на ' или }

(("")(?!(,|})))

это регулярное выражение отлавливает все "" s, которые не начинаются с :

((?<!:)(""))

Теория:

Отрицательный взгляд

(?!...)

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

например:

/foo(?!bar)/

foobar **foo** bar

Отрицательный взгляд назад

 (?<!...)

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

например:

/(?<!not )foo/

не foo, но foo

...