IndexRegExGroup - fonction de script et fonction de graphique
IndexRegExGroup() effectue une recherche dans la chaîne d'entrée et renvoie la position de départ de la énième occurrence du modèle d'expression régulière composite spécifié. Un quatrième argument facultatif count fournit la valeur de n, qui est égale à 1 s'il est omis. Les positions dans la chaîne sont numérotées de gauche à droite à partir de 1. Si aucune correspondance n'est trouvée, la fonction renvoie 0.
Cette fonction effectue des opérations de regex sensibles à la casse. Sinon, vous pouvez utiliser la variante IndexRegExGroupI() pour effectuer des opérations de regex non sensibles à la casse.
IndexRegExGroup
(text, regex, group [, count])
entier
Arguments
Argument
Description
text
Texte de chaîne d'entrée dans lequel rechercher une expression régulière.
regex
Expression régulière à utiliser pour la recherche dans la chaîne d'entrée.
group
Numéro du groupe, dans le cas d'une expression régulière composite.
Une valeur group égale à 0 renvoie l'index de l'ensemble de la regex. Toutefois, si l'expression régulière n'a besoin de renvoyer que l'index de la correspondance complète, utilisez plutôt la fonction IndexRegEx().
Vous pouvez spécifier une valeur group négative pour rechercher des correspondances de droite à gauche.
count
Numéro de la correspondance. Cela s'avère utile lorsqu'il est possible de trouver plusieurs correspondances pour l'expression régulière dans le texte. Par exemple, spécifiez une valeur 4 pour rechercher la position de la quatrième correspondance.
Cet argument est facultatif. S'il n'est pas spécifié, la valeur par défaut est 1. Vous pouvez spécifier une valeur négative pour rechercher des correspondances de droite à gauche.
Exemples de fonction
Exemple
Résultat
IndexRegExGroup('abc123','([a-z])([0-9]+)',0)
Renvoie 3 (position de départ de la regex complète).
IndexRegExGroup('abc123','([a-z])([0-9]+)',1)
Renvoie 3 (position de départ du premier groupe).
IndexRegExGroup('abc123','([a-z])([0-9]+)',2)
Renvoie 4, qui est la position de départ du deuxième groupe. Dans le modèle de regex d'entrée, la chaîne ([0-9]+) correspond au deuxième groupe.
IndexRegExGroup('ABC123','([a-z])([0-9]+)',1)
Renvoie 0, car IndexRegExGroup() est sensible à la casse.
IndexRegExGroupI('ABC123','([a-z])([0-9]+)',1)
Renvoie 3. La variante non sensible à la casse de la fonction, IndexRegExI(), est utilisée.
Cas d'utilisation
Les cas d'utilisation de cette fonction sont les suivants :
Identification de l'endroit où se trouvent des modèles de texte spécifiques dans des corps de texte plus volumineux. Par exemple, vous pourriez vouloir savoir où le domaine d'une adresse e-mail est utilisé dans une série de longs messages e-mail.
IndexRegExGroup() s'avère particulièrement utile pour le traitement de données avancé et est couramment utilisé dans la première étape d'une transformation plus longue et plus complexe. Il est généralement plus facile de résoudre les problèmes avec d'autres fonctions de regex telles que ExtractRegExGroup(), MatchRegEx() et CountRegEx(), mais il peut arriver que IndexRegExGroup() offre des solutions que ces fonctions ne peuvent pas fournir.
Exemple 1 – Script de chargement permettant de trouver les positions des composants ISBN
Vue d'ensemble
Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à un nouvel onglet.
Le script de chargement contient :
Création d'une variable, ISBN_RegEx, pour stocker l'expression régulière à utiliser.
Ensemble des codes ISBN des livres qu'une librairie souhaite commander auprès de plusieurs fournisseurs.
Pour chaque code ISBN, nous devons extraire la position de départ de chacun des éléments suivants :
EAN
Groupe
Déclarant
Publication
Somme de contrôle
Script de chargement
SET ISBN_RegEx = 'ISBN[ ]*([0-9]{3})-([0-9]{1})-([0-9]{4})-([0-9]{4})-([0-9]{1})';
ISBN:
LOAD Supplier,
IndexRegExGroup(Books,'$(ISBN_RegEx)',1) AS EAN,
IndexRegExGroup(Books,'$(ISBN_RegEx)',2) AS Group,
IndexRegExGroup(Books,'$(ISBN_RegEx)',3) AS Registrant,
IndexRegExGroup(Books,'$(ISBN_RegEx)',4) AS Publication,
IndexRegExGroup(Books,'$(ISBN_RegEx)',5) AS Checksum;
// Split the ISBN with the Group function in a preceding load to avoid generating a cartesian product
LOAD *,
ExtractRegEx(SupplierBooks, '$(ISBN_RegEx)') AS Books
INLINE [
Supplier, SupplierBooks
Supplier 1, ISBN 123-3-1234-1234-0 ISBN 012-2-0123-0123-4 ISBN 000-1-0123-0123-2 ISBN 234-5-2345-2345-1 ISBN 555-2-5555-5555-3 ISBN 222-4-2222-2222-2
Supplier 2, ISBN 000-0-3333-3333-3 ISBN 333-3-3333-3333-3 ISBN 555-1-5151-5151-3 ISBN 232-1-2323-2323-1 ISBN 008-0-7777-7777-3 ISBN 888-0-9999-0000-0
];
Résultats
Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :
Supplier
EAN
Group
Registrant
Publication
Checksum
Tableau de résultats
Supplier
EAN
Group
Registrant
Publication
Checksum
Supplier 1
6
10
12
17
22
Supplier 1
6
10
12
17
22
Supplier 1
6
10
12
17
22
Supplier 1
6
10
12
17
22
Supplier 1
6
10
12
17
22
Supplier 1
6
10
12
17
22
Supplier 2
6
10
12
17
22
Supplier 2
6
10
12
17
22
Supplier 2
6
10
12
17
22
Supplier 2
6
10
12
17
22
Supplier 2
6
10
12
17
22
Supplier 2
6
10
12
17
22
Dans ce cas, chaque livre contient des composants placés aux mêmes positions.
Exemple 2 – Expressions de graphique permettant de trouver les positions des URL (avec une comparaison IndexRegEx() )
Vue d'ensemble
Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à un nouvel onglet.
Le script de chargement contient :
Tableau nommé Correspondence, qui contient le texte de message e-mail dans un champ nommé EmailBody.
Contenu de message e-mail comportant des URL.
Nous voulons trouver la position de la deuxième URL, le cas échéant, ainsi que les positions des composants suivants :
Domaine
Chemin d'accès
Nous voulons utiliser une seule expression régulière pour effectuer toutes les opérations.
Script de chargement
Correspondence:
Load * Inline `
ID EmailBody
1 Thanks again for this morning's meeting! You can find the meeting minutes posted here: https://example.com/resourceexample. If you still have any questions, always feel free to ask me or one of the other team members. Here are a few learning resources that might help you: http://www.example.ca/training1.pptx http://www.example.ca/training2.pptx http://www.example.ca/training3.pptx Thanks again!
2 Hi, you'll want to visit our company website for that, it's available at https://www.example.se.
3 Hello all, I just wanted to let you know that our online stores are now up and running! I couldn't be more excited. We are already seeing quite a bit of traffic and volume sold, which is very promising! For Product A, go to https://www.examplestore1.com/products. For Product B, you'll want go to https://www.examplestore2.com/products. Product C, go check out https://www.examplestore3.com/products. Cheers!
` (delimiter is '\t');
Résultats
Chargez les données et ouvrez une feuille. Créez une table et ajoutez ce champ comme dimension :
IndexRegEx() renvoie la position de départ de l'intégralité de l'URL, tandis que IndexRegExGroup() renvoie les positions de départ des parties individuelles de l'URL, correspondant à la valeur group utilisée. L'enregistrement dont la valeur ID est égale à 2 ne contient qu'une seule URL, et des valeurs 0 sont donc renvoyées.
La même expression régulière est utilisée dans toutes les expressions de graphique pour renvoyer différentes informations. La répartition des groupes définis dans l'expression régulière est la suivante.
Groupes dans l'expression régulière
Numéro de groupe
Regex
Partie d'URL
1
([a-zA-Z0-9]+)
Protocole
2
(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))
Domaine (groupes 3, 4 et 5)
3
([a-zA-Z0-9]+\.)*
Domaine racine
4
([a-zA-Z0-9]+)
Domaine de niveau supérieur
5
([a-zA-Z0-9]+)
Chemin d'accès (groupes 7, 8, 9 et 10) (facultatif)
Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – dites-nous comment nous améliorer !