Как извлечь значения ключа из одноуровневой строки JSON с помощью регулярных выражений? - PullRequest
0 голосов
/ 13 октября 2019

Я хочу написать регулярное выражение для извлечения определенных ключей и значений некоторой строки JSON. Это строка JSON:

{"key1": "value1", "key2": "value2"}//there are more key-values 

И это регулярное выражение, которое я придумал:

^{\s*("([^\"]+)"\s*:\s*"([^\"]+)",?)+\s*}$

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

{"key1": "value1"}

или

{"key1": "value1", }

С конечными пробелами до и после "value" и "key", но, как я уже говорил, это не работает для болеечем одна пара ключ-значение, например:

{"key1": "value1", "key2": "value2"}

Я добавил ^ {\ s *( "([^ \"] +) "\ s *: \ s *" ([^\ "] +)",? )+ \ s *} $, чтобы регулярное выражение поддерживало повторение шаблона "key": "value" в json. Но это не работает. Как я могу это исправить?

1 Ответ

1 голос
/ 13 октября 2019

Полагаю, если вам нужно,

(?<={|,)\s*"([^"]+)"\s*:\s*"([^"]+)"\s*(?=}|,)

или

(?<={|,)\s*"([^"]+)"\s*:\s*"([^"]*)"\s*(?=}|,)

, или какое-то подобное выражение может работать в некоторой степени нормально.

Демонстрация


Если вы хотите упростить / изменить / изучить выражение, это объяснено на верхней правой панели regex101.com . Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами ввода.


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