Регулярное выражение для огромной строки
У меня есть строка ниже:
"\n - MyLibrary1 (= 0.10.0)\n - AFNetworking (= 1.1.0)\n - MyLibrary2 (= 3.0.0)\n - Objective-C-HMTL-Parser (= 0.0.1)\n\n"
Я хочу создать JSON, как это:
{
"MyLibrary1": "0.10.0",
"AFNetworking": "1.1.0",
"MyLibrary2": "3.0.0",
"Objective-C-HMTL-Parser": "0.0.1"
}
Для которого мне нужно разделить "MyLibrary1" и "0.10.0" и аналогично другим данным, чтобы создать строку. Я работаю над регулярным выражением, чтобы отделить данные от строки.
Я старался /-(.*)/
а также /=(.*)/
но это возвращает мне все после -
а также =
,
Есть ли способ получить необходимые данные с помощью одного регулярного выражения? Также, как я могу дать регулярному выражению знать, что он должен остановиться на (
или же )
, Я использую Rubular для проверки этого и всякий раз, когда я печатаю (
или же )
Я получаю "У вас есть непревзойденные скобки".
3 ответа
Вы можете использовать следующее регулярное выражение.
-\s*(\S+)\s*\(\s*=\s*(\S+)\s*\)
Ваши ключевые результаты матча будут в группе захвата #1
и значение совпадения результатов будет в группе #2
Кажется, работать с вашим образцом.
# -\s*(.*?)\s*\(\s*=\s*(.*?)\s*\)
-
\s*
( .*? ) # (1)
\s*
\(
\s*
=
\s*
( .*? ) # (2)
\s*
\)
Или, вы можете добавить мягкую проверку. Обратите внимание, что ленивые квантификаторы используются только
обрезать пробелы.
# -\s*([^()=]*?)\s*\(\s*=\s*([^()=-]*?)\s*\)
-
\s*
( [^()=]*? ) # (1)
\s*
\(
\s*
=
\s*
( [^()=-]*? ) # (2)
\s*
\)
-\s{1}([A-Za-z0-9]+)\s+\(=\s+([0-9\.]+)\)
Вернем матчи:
$ 1 AFNetworking $ 2 1.1.0
так далее...