Regex (Java): анализ списка строк после определенного ключевого слова - PullRequest
0 голосов
/ 15 февраля 2012

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

SrcDir { "D:\Temp\Input\" }
WorkDir { "D:\Temp\Work\" }
Folders {
  "Standard Color Workflow"
  "Normal"
  "Fast"
}

Я пытаюсь написать регулярное выражение, которое возвратит в качестве группы захвата ключевое слово, а затем список его соответствующих значений.

Я началиспользуя ([\w]+)\s\{([^}\n]+)}\n, но он, очевидно, не работает в разделе «Папки» вышеприведенного примера, и это регулярное выражение не может возвращать несколько значений, даже если они все в одной строке.

Любая помощь в этом будетс благодарностью.

1 Ответ

0 голосов
/ 15 февраля 2012

Вы в основном там.Вам просто нужно удалить свои \n ссылки.Как в:

([\w]+)\s\{([^}]+)}

Теперь это означает, что в третьем случае все эти поля будут иметь свои \ n встроенные в захваченную группу.

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

--- EDIT:

Чтобы получить каждый из них в свою собственную группу захвата, Чтобы указать кавычки отдельно.Попробуйте это:

([\w]+)\s\{(\s*"([^}"]+)"\s*)+}  -- doesn't work

--- РЕДАКТИРОВАТЬ 2:

Мой пример включения каждого из них в свою группу не работает.И это не будет. StackOverflow: 5018487 .

Я предлагаю использовать свое исходное регулярное выражение, взять полный набор строк, найденных внутри {'s, а затем выполнить второй поиск регулярного выражения в этом сопоставленном тексте, чтобы вытащить каждый"текст".

Спасибо, я кое-что узнал сегодня!

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