Как использовать regex_extract в большом запросе, если я хочу извлечь только секунду после второго sla sh? - PullRequest
1 голос
/ 13 марта 2020

Я использую regexp_extract(hit.page.pagepath,r'www.abcd.com/(.*?)/'), но это дает мне 'sports' в большом запросе, и я хочу извлечь только после 'sports' и до 'gamescore', ie 'football'.

. url https://www.abcd.com/sports/football/gamescore - это пример, который постоянно меняется, но www.abcd.com является постоянным.

Я хочу извлекать вторую sla sh часть URL-адреса всегда - т.е. / футбол /

Ответы [ 3 ]

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

Ваша попытка довольно близка:

regexp_extract(hit.page.pagepath, r'www.abcd.com/[^/]+/([^/]+)/') 

[^/]+ представляет собой последовательность символов, отличную от / (хотя бы один символ).

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

Ниже для BigQuery Standard SQL

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

REGEXP_EXTRACT(url, r'(?:https://|http://|)(?:.*?/){2}([^/]*)')  

Вы можете протестировать, поиграть с ним, используя приведенный ниже пример

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'https://www.abcd.com/sports/football/gamescore' url UNION ALL
  SELECT 'http://www.abcd.com/sports/football/gamescore' url UNION ALL
  SELECT 'www.abcd.com/sports/football/gamescore' url UNION ALL
  SELECT 'www.abcd.com/sports/football' url UNION ALL
  SELECT 'www.abcd.com/sports/' url 
)
SELECT REGEXP_EXTRACT(url, r'(?:https://|http://|)(?:.*?/){2}([^/]*)')
FROM `project.dataset.table`   

с результатом

Row f0_  
1   football     
2   football     
3   football     
4   football     
5         

Очевидно - вы можете настроить его так, чтобы он представлял ваш реальный вариант использования

Например, изменяя {2}, вы можете контролировать, какая часть URL для извлечения

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

split() это простой способ сделать это:

select split('https://www.abcd.com/sports/football/gamescore', '/')[safe_ordinal(4)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...