1
votes

Comment utiliser regex_extract dans une grande requête si je veux extraire uniquement la deuxième après la deuxième barre oblique?

J'utilise regexp_extract (hit.page.pagepath, r'www.abcd.com /(.*?)/ ') mais cela me donne ' sports ' en grande requête et je souhaite extraire uniquement après 'sports' et avant 'gamescore' , c'est-à-dire 'football' .

L'url https://www.abcd.com/sports/football/gamescore est un exemple qui ne cesse de changer mais www.abcd.com est constant.

Je veux toujours extraire la deuxième partie barre oblique de l'URL - c'est-à-dire /football/


1 commentaires

Vous avez un tarif bas. Important sur SO - vous pouvez marquer la réponse acceptée en utilisant la coche à gauche de la réponse publiée, sous le vote. Voir meta.stackexchange .com / questions / 5234 /… pour savoir pourquoi c'est important! Il est également important de voter sur la réponse . Votez pour les réponses utiles. ... Vous pouvez vérifier ce qu'il faut faire lorsque quelqu'un répond à votre question - stackoverflow.com/help/someone-answers . En suivant ces règles simples, vous augmentez votre propre score de réputation et en même temps vous nous motivez à répondre à vos questions: o) veuillez considérer!


3 Réponses :


0
votes

split () est un moyen simple de le faire:

select split('https://www.abcd.com/sports/football/gamescore', '/')[safe_ordinal(4)]


1 commentaires

@DivyangJain. . . Y a-t-il une raison pour laquelle vous n'avez pas accepté cette réponse? Cela semble être la solution la plus simple à votre problème.



0
votes

Votre tentative est assez proche:

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

[^ /] + représente une séquence de caractères autres que / (au moins un caractère).


0 commentaires

0
votes

Ci-dessous est pour BigQuery Standard SQL

Je suggère ci-dessous l'expression régulière pour éliminer la dépendance au domaine codé en dur

Row f0_  
1   football     
2   football     
3   football     
4   football     
5         

Vous pouvez tester, jouer avec en utilisant l'exemple ci-dessous

#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`   

avec résultat

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

Évidemment - vous pouvez l'ajuster davantage pour présenter votre cas d'utilisation réel

Par exemple, en modifiant {2} , vous pouvez contrôler la partie de l'URL à extraire


0 commentaires