"?artistName"?\s*:\s*"([^"]*)("|$)
должен сделать трюк. Он даже обрабатывает некоторые изменения в строке:
- Пустое пространство до и после
:
artistName
с и без кавычек
- отсутствующими
"
в конце имени исполнителя, если это последнее, что строка
Но будет намного больше вариантов ввода, с которым вы можете столкнуться, что это регулярное выражение не будет совпадать.
Также вы не хотите использовать регулярное выражение для соответствия этому по соображениям производительности. Сейчас вас может заинтересовать только поле artistName
. Но через некоторое время вам понадобится информация из других полей. Если вы просто измените имя поля в регулярном выражении, вам придется снова сопоставить всю строку. Гораздо лучше использовать парсер и преобразовать всю строку в словарь, где вы можете легко получить доступ к различным полям. Анализ всей строки не должен занимать гораздо больше времени, чем сопоставление последней пары ключ/значение с использованием регулярного выражения.
Это похоже на какой-то JSON, есть много хороших и полных парсеров. Однако нетрудно написать один. Вы можете написать простой recursive descent parser через пару часов. Я думаю, что это то, что каждый программист должен был сделать хотя бы один раз.
Я уверен, что есть парсер, что [(например, это один, например?)] (Http://code.google.com/p/json- фреймворк/). Вы не хотите делать это с помощью регулярного выражения. – Tomalak
Я бы предпочел regex, если честно, я пытаюсь его изучить – user393273
@user: Это может быть так, но это действительно плохой случай для регулярного выражения. Всякий раз, когда вложенные структуры (и да, CSV или JSON - вложенные структуры) нуждаются в разборе, используйте парсер. Regex не может справиться с вложенными структурами. Вы можете приблизиться, но вы никогда не накрываете 100%. - * Неизбежно, кто-то придет и предоставит регулярный ответ, который будет работать. За исключением случаев в углу. Это, конечно, никогда не произойдет. За исключением случаев, когда они это делают. Используйте свою собственную опасность. ; -) * – Tomalak