Регулярное выражение с соответствием между кавычками - PullRequest
1 голос
/ 18 марта 2020

Я пытался найти решение своей проблемы с RegEx, но не могу найти ответ.

Моя целевая строка выглядит так:

"Elevator" <sip:103@192.168.1.1>;tag=343483547

Я хочу, чтобы мои соответствующие группы были : - Лифт - 103

Но когда я использую это регулярное выражение:

"(.*)"?<sip:(\d*)@.*

, тогда я получаю нежелательную цитату с моим первым матчем. Это приводит к: - Лифт "- 103

Я не могу заставить его работать. Я пробовал самые очевидные вещи, такие как

"([^"]*)"?<sip:(\d*)@.*

, но затем первый матч полностью исчезает

Что я делаю не так.

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Вам необходимо учесть пробел между необязательным " и следующим < символом.

Использовать

"([^"]*)"?\s*<sip:(\d*)@.*

См. Демонстрационный пример regex

Подробности

  • " - " char
  • ([^"]*) - Группа 1: любой ноль или более символов, другие чем "
  • "? - необязательный " char
  • \s* - 0+ пробелов
  • <sip: - <sip: подстрока
  • (\d*) - Группа 2: ноль или более (замените * на +, чтобы соответствовать одной или более) цифр
  • @.* - @ и остальная часть строки.
1 голос
/ 18 марта 2020

Вы делаете " необязательным, а .* является жадным соответствием, пока не встретится <.

Если кавычка нежелательна, вы можете обновить ее, чтобы сделать "необязательным и совпадать с пробелом перед <.

Часть "(.*?)" также можно сопоставить как ([^"]+)

Если вы хотите сопоставить 1 или более цифр, используйте \d+

"(.*?)" <sip:(\d+)@

Regex demo (нажмите на вкладку Таблица)

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