# ExtractRegExGroup - Fonction de script et de graphique

ExtractRegExGroup() extrait le texte d'une expression de chaîne d'entrée en utilisant le modèle d'expression régulière composite spécifié. Lorsque vous utilisez la fonction, indiquez le groupe à utiliser dans l'expression régulière composite. Si aucune correspondance n'est trouvée, la fonction renvoie une valeur nulle.

Si vous utilisez la fonction ExtractRegExGroup() dans une instruction LOAD et si field\_no est omis, la fonction renverra plusieurs enregistrements. Si plusieurs champs sont chargés à l'aide de ExtractRegExGroup(), les produits cartésiens de toutes les combinaisons sont créés.

Cette fonction effectue des opérations de regex sensibles à la casse. Sinon, vous pouvez utiliser la variante ExtractRegExGroupI() pour effectuer des opérations de regex non sensibles à la casse.

ExtractRegExGroup (text, regex, group [, field\_no])

string

Arguments

| Argument | Description |
| --- | --- |
| text | Expression de chaîne contenant le texte à extraire dans la valeur de renvoi. |
| regex | Expression régulière à utiliser pour extraire le texte. |
| group | Numéro du groupe, dans le cas d'une expression régulière composite.<br><br>Si l'expression régulière ne contient qu'un seul groupe, utilisez plutôt la fonction ExtractRegEx(). Sinon, utilisez ExtractRegExGroup() avec une valeur group égale à `0`.<br><br>Vous pouvez spécifier une valeur group négative pour rechercher des correspondances de droite à gauche. |
| field\_no | Numéro de la correspondance à extraire. 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 extraire la quatrième correspondance.<br><br>Cet argument est facultatif. S'il n'est pas spécifié, la valeur par défaut est 1. |

Exemples de fonction

| Exemple | Résultat |
| --- | --- |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',1)` | Renvoie `abc` (premier groupe de la première correspondance). |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',1,2)` | Renvoie `def` (premier groupe de la deuxième correspondance). |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',2)` | Renvoie `123` (deuxième groupe de la première correspondance). |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',2,2)` | Renvoie `456` (deuxième groupe de la deuxième correspondance). |

## Cas d'utilisation

Vous pouvez utiliser Extract RegEx() pour extraire des informations à isoler de données pouvant également contenir d'autres informations (par exemple, un texte libre ou des chaînes JSON). Par exemple :

* Extraire d'un texte des adresses e-mail, des numéros de téléphone, des numéros de compte et d'autres informations.

* Extraire d'un texte des valeurs numériques (par exemple, des devises).

* Normaliser le formatage de données textuelles ou numériques.

## Exemple 1 – Script de chargement permettant d'analyser des codes de transaction

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegExGroup.htm)

#### Script de chargement et résultats

Vue d'ensemble

Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à une nouvelle section.

Le script de chargement contient :

* Tableau nommé `Transactions`, qui contient des informations sur les transactions. Certains détails sont capturés avec des codes de transaction via la syntaxe suivante :

  Année de la transaction-Source de la transaction (c'est-à-dire, achat en ligne ou en magasin)-Centre de distribution associé

* Création de plusieurs nouveaux champs pour extraire chaque détail, chacun réutilisant la même expression régulière composite.

Nos besoins :

* L'année peut être une combinaison de quatre chiffres.

* Les valeurs ONLINE et INSTORE sont les seules valeurs acceptables pour la source de la transaction.

* Le centre de distribution doit comporter exactement cinq chiffres.

Script de chargement

```
Transactions:

Load 
	recno() as RecordID,
	ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',0) as TransactionCode_Unparsed,
	ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',1) as TransactionYear,
	ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',2) as TransactionSource,
	ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',3) as TransactionDC,
* Inline `
TransactionCode, Category
2025-ONLINE-60019, Product A
2024-INSTORE-60020, Product B
2025-ONLINE-60018, Product C
2024-ONLINE-60020, Product A
2025-INSTORE-60019, Product B
2025-ONLINE-60017, Product D
`;
```

Résultats

Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :

* `RecordID`

* `TransactionCode`

* `TransactionCode_Unparsed`

* `TransactionYear`

* `TransactionSource`

* `TransactionDC`

Tableau de résultats

| RecordID | TransactionCode | TransactionCode\_Unparsed | TransactionYear | TransactionSource | TransactionDC |
| --- | --- | --- | --- | --- | --- |
| 1 | 2025-ONLINE-60019 | 2025-ONLINE-60019 | 2025 | ONLINE | 60019 |
| 2 | 2024-INSTORE-60020 | 2024-INSTORE-60020 | 2024 | INSTORE | 60020 |
| 3 | 2025-ONLINE-60018 | 2025-ONLINE-60018 | 2025 | ONLINE | 60018 |
| 4 | 2024-ONLINE-60020 | 2024-ONLINE-60020 | 2024 | ONLINE | 60020 |
| 5 | 2025-INSTORE-60019 | 2025-INSTORE-60019 | 2025 | INSTORE | 60019 |
| 6 | 2025-ONLINE-60017 | 2025-ONLINE-60017 | 2025 | ONLINE | 60017 |

Ces résultats montrent comment l'argument group vous permet de réutiliser une seule regex pour plusieurs opérations. Le champ `TransactionCode_Unparsed`, qui utilise une valeur group égale à 0, n'apporte aucune valeur supplémentaire dans ce cas, mais il est indiqué ici à des fins de démonstration de la fonction.

## Exemple 2 – Script de chargement permettant d'extraire des coordonnées d'entreprise

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegExGroup.htm)

#### Script de chargement et résultats

Vue d'ensemble

Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à une nouvelle section.

Le script de chargement contient :

* Tableau nommé `BusinessContactInfo` qui contient des informations sur les entreprises trouvées sur le site Internet de chacune d'entre elles.

* `ContactInfo` est un champ qui contient un texte libre, y compris les adresses e-mail et les numéros de téléphone des entreprises.

* Création de plusieurs nouveaux champs pour extraire chaque détail, chacun réutilisant la même expression régulière composite.

Nos besoins :

* Les adresses e-mail doivent remplir un ensemble spécifique de conditions et respecter certaines règles syntaxiques.

* Les numéros de téléphone doivent être des numéros de téléphone NANP de 10 chiffres. Nous voulons permettre le placement entre parenthèses de l'indicatif régional et autoriser les espaces vides et les traits d'union à certains endroits.

Script de chargement

```
BusinessContactInfo:

Load
	ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',1,1) as CompanyEmail,
	ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',2,2) as CompanyPhoneNum,
* Inline `
ID	CompanyName	ContactInfo
1	Company A	Email is: Company1@example.com, Phone number is: (123) 456-7890
2	Company B	Email is: company2@test.com, Phone # is: 0123456790
3	Company C	Email is: company3@placeholder.com, Phone no. is: 234-567-8901

` (delimiter is '\t');
```

Résultats

Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :

* `CompanyName`

* `CompanyEmail`

* `CompanyPhoneNum`

Tableau de résultats

| CompanyName | CompanyEmail | CompanyPhoneNum |
| --- | --- | --- |
| Company A | Company1@example.com | (123) 456-7890 |
| Company B | company2@test.com | 0123456790 |
| Company C | company3@placeholder.com | 234-567-8901 |

La même expression régulière composite est réutilisée pour récupérer des informations différentes. L'argument group spécifie lequel des deux groupes de l'expression régulière doit faire l'objet de la recherche, et l'argument field\_no spécifie la correspondance globale (sur l'ensemble de la chaîne) à trouver.

La variante ExtractRegEGroupxI() de la fonction permet d'effectuer des recherches sans tenir compte de la casse.

## Exemple 3 – Script de chargement permettant d'extraire les composants de codes ISBN

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegExGroup.htm)

#### Script de chargement et résultats

Vue d'ensemble

Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à une nouvelle section.

Le script de chargement contient :

* Création d'une variable, `ISBN_RegEx`, pour stocker l'expression régulière à utiliser pour toutes les extractions.
* Ensemble des codes ISBN des livres qu'une librairie souhaite commander auprès de plusieurs fournisseurs.

Nous devons extraire les éléments suivants de chaque code ISBN :

* 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,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',1) AS EAN,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',2) AS Group,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',3) AS Registrant,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',4) AS Publication,
ExtractRegExGroup(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 | 000 | 1 | 0123 | 0123 | 2 |
| Supplier 1 | 012 | 2 | 0123 | 0123 | 4 |
| Supplier 1 | 123 | 3 | 1234 | 1234 | 0 |
| Supplier 1 | 222 | 4 | 2222 | 2222 | 2 |
| Supplier 1 | 234 | 5 | 2345 | 2345 | 1 |
| Supplier 1 | 555 | 2 | 5555 | 5555 | 3 |
| Supplier 2 | 000 | 0 | 3333 | 3333 | 3 |
| Supplier 2 | 008 | 0 | 7777 | 7777 | 3 |
| Supplier 2 | 232 | 1 | 2323 | 2323 | 1 |
| Supplier 2 | 333 | 3 | 3333 | 3333 | 3 |
| Supplier 2 | 555 | 1 | 5151 | 5151 | 3 |
| Supplier 2 | 888 | 0 | 9999 | 0000 | 0 |

## Exemple 4 – Expressions de graphique permettant d'extraire des coordonnées professionnelles (avec une comparaison ExtractRegEx())

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegExGroup.htm)

#### Expressions de graphique et résultats

Vue d'ensemble

Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à une nouvelle section.

Le script de chargement contient :

* Tableau nommé BusinessContactInfo qui contient des informations sur les entreprises trouvées sur le site Internet de chacune d'entre elles.

* ContactInfo est un champ qui contient un texte libre, y compris les adresses e-mail et les numéros de téléphone des entreprises. Nous voulons extraire chaque adresse e-mail et chaque numéro de téléphone avec des expressions de graphique.

Nos besoins :

* Les adresses e-mail doivent remplir un ensemble spécifique de conditions et respecter certaines règles syntaxiques.

* Les numéros de téléphone doivent être des numéros de téléphone NANP de 10 chiffres. Nous voulons permettre le placement entre parenthèses de l'indicatif régional et autoriser les espaces vides et les traits d'union à certains endroits.

Script de chargement

```
BusinessContactInfo:

Load * Inline `
ID	CompanyName	ContactInfo
1	Company A	Email is: Company1@example.com, Phone number is: (123) 456-7890
2	Company B	Email is: company2@test.com, Phone # is: 0123456790
3	Company C	Email is: company3@placeholder.com, Phone no. is: 234-567-8901

` (delimiter is '\t');
```

Résultats

Chargez les données et ouvrez une feuille. Créez une table et ajoutez ce champ comme dimension :

* CompanyName

Ajoutez les dimensions calculées suivantes au tableau :

* 

  ```
  =ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',1,1)
  ```

* 

  ```
  =ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',2,2)
  ```

Tableau de résultats

| CompanyName | =ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&\*\-\_+=~{\|}\/.'']{1,50})\|(\({0,1}[0-9]{3}\){0,1}[ -]\*[0-9]{3}[ -]\*[0-9]{4})',1,1) | =ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&\*\-\_+=~{\|}\/.'']{1,50})\|(\({0,1}[0-9]{3}\){0,1}[ -]\*[0-9]{3}[ -]\*[0-9]{4})',2,2) |
| --- | --- | --- |
| Company A | Company1@example.com | (123) 456-7890 |
| Company B | company2@test.com | 0123456790 |
| Company C | company3@placeholder.com | 234-567-8901 |

La même expression régulière composite est réutilisée pour récupérer des informations différentes. L'argument group spécifie lequel des deux groupes de l'expression régulière doit faire l'objet de la recherche, et l'argument field\_no spécifie la correspondance globale (sur l'ensemble de la chaîne) à trouver.

La variante ExtractRegEGroupI() de la fonction permet d'effectuer des recherches sans tenir compte de la casse.

## Exemple 5 – Analyse d'URL (avec une comparaison ExtractRegEx() )

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegExGroup.htm)

#### Expressions de graphique et résultats

Vue d'ensemble

Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à une nouvelle section.

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 extraire la deuxième URL, le cas échéant, dans les composants suivants :

* URL complète

* Protocole

* Domaine

* Chemin d'accès

Nous voulons utiliser une seule expression régulière pour contrôler toutes les extractions.

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 :

* ID

Ajoutez ces dimensions calculées :

* URL 2 :

  ```
  =ExtractRegEx(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',2)
  ```

* Protocole d'URL 2 :

  ```
  =ExtractRegExGroup(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',1,2)
  ```

* Domaine d'URL 2 :

  ```
  =ExtractRegExGroup(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',2,2)
  ```

* Chemin d'accès à l'URL 2 :

  ```
  =ExtractRegExGroup(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',6,2)
  ```

Tableau de résultats

| ID | URL 2 | Protocole d'URL 2 | Domaine d'URL 2 | Chemin d'accès à l'URL 2 |
| --- | --- | --- | --- | --- |
| 1 | http://www.example.ca/training1.pptx | http | www.example.ca | /training1.pptx |
| 2 | - | - | - | - |
| 3 | https://www.examplestore2.com/products | https | www.examplestore2.com | /products |

ExtractRegEx() renvoie l'intégralité de l'URL, tandis que ExtractRegExGroup() renvoie 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 aucune donnée n'est donc renvoyée pour cet enregistrement.

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) |
| 6 | ((\/[a-zA-Z0-9]+)\*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))? | Sous-répertoire |
| 7 | (\/[a-zA-Z0-9]+)\* | Fichier (groupes 9 et 10) |
| 8 | (\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?) | File |
| 9 | ([a-zA-Z0-9]+) | Nom de fichier |
| 10 | (\.[a-zA-Z0-9]+)? | Extension de fichier (facultatif) |

## En savoir plus

* [Utilisation d'expressions régulières dans les scripts de chargement et les expressions de graphique](https://help.qlik.com/fr-FR/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)