Regex для извлечения конкретного значения параметра запроса из URL в Google Sheets - PullRequest
0 голосов
/ 06 марта 2020

У меня есть электронная таблица Google со списком URL с таким общим шаблоном: https://example.com/form?utm_source=facebook&utm_medium=banner&utm_content=test&utm_campaign=test

Я хочу извлечь значение параметра utm_content ( test ) в отдельную ячейку. Я мог бы использовать несколько сплитов, но мне нужно только значение этого конкретного.

Попытался сделать несколько трюков с комбинацией SEARCH и LEFT, RIGHT или MID, но не смог сделать это правильно. Я думаю, что REGEXEXTRACT должен работать, но не знаете с чего начать.

Есть какие-нибудь идеи о том, как регулярное выражение должно go здесь, в листах Google? Спасибо.

Ответы [ 3 ]

0 голосов
/ 06 марта 2020

Не используйте REGEXEXTRACT. Это работает, но без поддержки lookbehinds, после извлечения будет некоторая переделка.

Вместо этого используйте REGEXREPLACE.

=REGEXREPLACE(<source text>, ".*?[&?]utm_content=(.*?)(&.*|$)", "$1")

Подробности:

  • .*?: читать наименьшую возможную часть от начала до тех пор, пока вы не сможете прочитать следующие шаги
  • [&?]: прочитать либо &, либо ? (вы можете не знать, встречается ли этот параметр на первом месте или нет)
  • utm_content=: прочитать точную строку utm_content=
  • (.*?): прочитать наименьшую возможную часть от начала до тех пор, пока вы не сможете прочитать следующие шаги
  • (&.*|$) : прочитайте либо & и столько символов, сколько возможно, либо конец ввода
  • $1: и затем замените все совпадение (так, от первого до последнего символа, потому что все совпадает) группой # 1 (т.е. (.*?) один)

enter image description here

0 голосов
/ 06 марта 2020

Кроме того, вы также можете попробовать (предполагая URL в A2)

=regexextract(A2, "utm_content=(.+)&")

или, чтобы обработать весь столбец (предполагая URL в столбце A)

=Arrayformula(if(len(A2:A), regexextract(A2:A, "utm_content=(.+)&"),))

Example

0 голосов
/ 06 марта 2020

Используйте lookarounds. (?<=) ищет определенное значение раньше, (?=) ищет определенное значение после, [^&]*? совмещает все между ними двумя. Это должно работать для вас:

(?<=utm_content=)[^&]*?(?=&|$)

демо https://regex101.com/r/NY5mn1/3/

...