парсинг строки с помощью регулярного выражения - PullRequest
0 голосов
/ 13 июля 2011

У меня есть строка

"name"=>"3B Ae", "note"=>"Test fddd \"33 Ae\" FIXME", "is_on"=>"keke, baba"

, и я хочу разобрать ее с помощью Java-программы на сегменты

name
3B Ae
note
Test fddd \"33 Ae\" FIXME
is_on
keke, baba

Следует отметить, что содержимое строки, т.е.name, 3B Ae, не фиксируются.Любое предложение?

Ответы [ 3 ]

4 голосов
/ 13 июля 2011

Если вы:

  • замените => на:
  • Оберните всю строку в {}

Результат будет выглядеть следующим образом, чтодействителен JSON.Затем вы можете использовать JSON-анализатор (например, GSON или Jackson) для анализа этих значений в java-объекте.

{
    "name": "3B Ae",
    "note": "Test fddd \"33 Ae\" FIXME",
    "is_on": "keke, baba"
}

Если у вас есть контроль над процессом, создающим эту строку, я настоятельно рекомендую вамиспользуйте стандартный формат, такой как JSON или XML, который проще анализировать на другом конце.

1 голос
/ 13 июля 2011

Из-за правил цитирования я не уверен, что регулярное выражение (даже PCRE с отрицательными взглядами) может анализировать это последовательно.Что вам, вероятно, нужно - это использовать пуш-автомат или другой синтаксический анализатор, способный обрабатывать язык без контекста.

0 голосов
/ 13 июля 2011

Если вы можете убедиться, что ваши данные (ключ или значение) не имеют => или , (или найти некоторые другие разделители, которые не будут встречаться), решение довольно простое:

  • Разделите строку на ,, и вы получите key => value пар
  • Разделив ключ value => pairs на =>, вы получите то, что хотите

если inputString содержит
"name"=>"3B Ae", "note"=>"Test fddd \"33 Ae\" FIXME", "is_on"=>"keke baba"
(из файла, например)
(Я изменил , на ; с keke до baba)

    String[] keyValuePairs = inputString.split(",");
    for(String oneKeyValue : keyValuePairs)
    {
       String[] keyAndValue = oneKeyValue.split("=>");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...