регулярное выражение для получения строки в 2 строки - PullRequest
1 голос
/ 30 сентября 2010
"artistName":"Travie McCoy", "collectionName":"Billionaire (feat. Bruno Mars) - Single", "trackName":"Billionaire (feat. Bruno Mars)",

Я хочу получить имя исполнителя, чтобы Трэви МакКой из этого кода использовал regex. Пожалуйста, не используйте regexkitlite для iphone sdk, если это изменит вещи.

Спасибо

Ответы [ 2 ]

2 голосов
/ 30 сентября 2010

"?artistName"?\s*:\s*"([^"]*)("|$) должен сделать свое дело.Он даже обрабатывает некоторые изменения в строке:

  • Пробел до и после :
  • artistName с кавычками и без
  • отсутствует " в конце имени исполнителя, если это последняя вещь в строке

Но будет много других вариантов ввода, с которыми вы можете столкнуться, что это регулярное выражение не будет соответствовать.

Кроме того, вы не хотите использовать регулярное выражение для сопоставления этого по соображениям производительности.Сейчас вас может заинтересовать только поле artistName.Но через некоторое время вам понадобится информация из других полей.Если вы просто измените имя поля в регулярном выражении, вам придется снова сопоставить всю строку.Гораздо лучше использовать синтаксический анализатор и преобразовать всю строку в словарь, где вы можете легко получить доступ к различным полям.Разбор всей строки не должен занимать намного больше времени, чем сопоставление последней пары ключ / значение с использованием регулярного выражения.

Это похоже на какой-то JSON, есть много хороших и полных анализаторов.Это не трудно написать сам, хотя.Вы можете написать простой парсер рекурсивного спуска за пару часов.Я думаю, что это то, что каждый программист должен был сделать хотя бы один раз.

0 голосов
/ 01 октября 2010
\"?artistName\"?\s*:\s*\"([^\"]*)(\"|$)

То для цели c

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