Regex для извлечения пары ключ-значение из строки HTTP-запроса
Я использую пакет анализа данных, который предоставляет функцию Regex для анализа строк. Я пытаюсь разобрать ответ с веб-сайта в формате...
key1=val1&key2=val2&key3=val3 ...
[Существует вероятность того, что ключи и значения могут быть закодированы в процентах, но текущие возвращаемые значения - нет, текущие возвращаемые значения - токены и другая информация, которая является буквенно-цифровой].
Я понимаю, что эти данные имеют кодировку www-form-urlencoded или, альтернативно, их можно назвать форматом строки запроса.
Цель состоит в том, чтобы извлечь значение для данного ключа, если на порядок ключей нельзя положиться. Например, я могу знать, что один из ключей, которые я должен получить, - это "токен", так какой шаблон регулярного выражения можно использовать для извлечения значения для ключа "токен"? Я искал это, но не могу найти ничего, что делает то, что мне нужно, но если есть повторяющийся вопрос, заранее извиняюсь.
1 ответ
В Alteryx вы можете использовать Tokenize с регулярным выражением, содержащим группу захвата вокруг части, которую нужно извлечь:
Метод Tokenize позволяет вам указать регулярное выражение для сопоставления, и эта часть строки разбирается на отдельные столбцы (или строки). При использовании метода Tokenize вы хотите сопоставить весь токен, а если у вас есть отмеченная группа, возвращается только эта часть.
Я выделил часть описания метода, которая доказывает, что при наличии группы захвата будет возвращена только эта часть, а не все совпадение.
Таким образом, вы можете использовать
(?:^|[?&])token=([^&]*)
где вместо token
Вы можете использовать любой из ключей, значение которого вы хотите извлечь.
Смотрите демо-версию регулярного выражения.
подробности
(?:^|[?&])
- начало строки,?
или же&
(если строка является просто строкой пары ключ-значение, вы можете пропустить?
и использовать(?:^|&)
или же(?<![^&])
)token
- ключ=
- знак равенства([^&]*)
- Группа 1 (это будет извлечено): 0 или более символов, кроме&
(если вы не хотите извлекать пустые значения, замените*
с+
квантор).