Regex для извлечения пары ключ-значение из строки HTTP-запроса

Я использую пакет анализа данных, который предоставляет функцию Regex для анализа строк. Я пытаюсь разобрать ответ с веб-сайта в формате...

key1=val1&key2=val2&key3=val3 ...

[Существует вероятность того, что ключи и значения могут быть закодированы в процентах, но текущие возвращаемые значения - нет, текущие возвращаемые значения - токены и другая информация, которая является буквенно-цифровой].

Я понимаю, что эти данные имеют кодировку www-form-urlencoded или, альтернативно, их можно назвать форматом строки запроса.

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

1 ответ

Решение

В Alteryx вы можете использовать Tokenize с регулярным выражением, содержащим группу захвата вокруг части, которую нужно извлечь:

Метод Tokenize позволяет вам указать регулярное выражение для сопоставления, и эта часть строки разбирается на отдельные столбцы (или строки). При использовании метода Tokenize вы хотите сопоставить весь токен, а если у вас есть отмеченная группа, возвращается только эта часть.

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

Таким образом, вы можете использовать

(?:^|[?&])token=([^&]*)

где вместо token Вы можете использовать любой из ключей, значение которого вы хотите извлечь.

Смотрите демо-версию регулярного выражения.

подробности

  • (?:^|[?&]) - начало строки, ? или же & (если строка является просто строкой пары ключ-значение, вы можете пропустить ? и использовать (?:^|&) или же (?<![^&]))
  • token - ключ
  • = - знак равенства
  • ([^&]*) - Группа 1 (это будет извлечено): 0 или более символов, кроме & (если вы не хотите извлекать пустые значения, замените * с + квантор).
Другие вопросы по тегам