Regex replace - двойные кавычки в json - PullRequest
0 голосов
/ 26 мая 2020

У меня есть строка json, и она выглядит как

{“test”:”this is “test” of test”,”result”:”your result is “out” in our website”}

Мне нужно сделать ее действительной json с помощью regex_replace, как вы можете видеть выше, недопустима json. Ожидаемый результат после замены:

{«test»: «это« тест »test», «result»: «ваш результат« не соответствует »на нашем веб-сайте»}

Ваша помощь были бы признательны

Ответы [ 2 ]

0 голосов
/ 04 июля 2020

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

Регулярное выражение для соответствия псевдодействующей строке JSON - это

r'([:\[,{]\s*)"(.*?)"(?=\s*[:,\]}])'

см. https://regex101.com/r/KgCz1L/1

В обратном вызове просто заменяет все двойные кавычки одинарными '

Python пример:

>>> import re
>>>
>>> text = '''
... {"test":"this is "test" of test","result":"your result is "out" in our website"}
... '''
>>>
>>> def repl_call(m):
...     preq = m.group(1)
...     qbody = m.group(2)
...     qbody = re.sub( r'"', "'", qbody )
...     return preq + '"' + qbody + '"'
...
>>> print( re.sub( r'([:\[,{]\s*)"(.*?)"(?=\s*[:,\]}])', repl_call, text ))

{"test":"this is 'test' of test","result":"your result is 'out' in our website"}
0 голосов
/ 26 мая 2020

Проверьте это. Меня вдохновил этот ответ { ссылка }, и я немного изменил регулярное выражение и замену, чтобы он работал для вашего варианта использования.

var myString = '{"test":"this is "test" "of" test","result":"your result "is-out" in our website"}';
var myRegexp = /\"(.+?)\"\s*[,}:\n]/g;
var match;
var matches = [];

// Save all the matches
while ((match = myRegexp.exec(myString)) !== null) {
  matches.push(match[1]);
}

// Process them
var newString = myString;
for (var i = 0; i < matches.length; i++) {
  var newVal = matches[i].replace(/\"/g, "'");
  newString = newString.replace(matches[i], newVal);
}
console.log(newString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...