# ExtractRegExGroup — funkcja skryptu i funkcja wykresu

ExtractRegEx() wyodrębnia tekst z wejściowego wyrażenia ciągu przy użyciu określonego złożonego wzorca wyrażenia regularnego. Podczas korzystania z tej funkcji należy określić grupę do użycia w złożonym wyrażeniu regularnym. Funkcja zwraca wartość null, jeśli nie znaleziono żadnych dopasowań.

W przypadku użycia funkcji ExtractRegExGroup() w instrukcji LOAD i pominięcia field\_no funkcja zwróci wiele rekordów. Jeśli przy użyciu funkcji ExtractRegExGroup() załadowano kilka pól, wówczas zostanie wygenerowany iloczyn kartezjański wszystkich kombinacji.

Funkcja ta wykonuje operacje z wyrażeniami regularnymi, w których rozróżniana jest wielkość liter. Zamiast tego można użyć wariantu ExtractRegExGroupI(), aby wykonywać operacje z wyrażeniami regularnymi bez rozróżniania wielkości liter.

Składnia:

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

Typ zwracanych danych: ciąg znaków

Argumenty

| Argument | Opis |
| --- | --- |
| text | Wyrażenie ciągu zawierające tekst, który ma zostać wyodrębniony w wartości zwracanej. |
| regex | Wyrażenie regularne używane do wyodrębniania tekstu. |
| group | Numer grupy w przypadku złożonego wyrażenia regularnego.<br><br>Jeśli wyrażenie regularne zawiera tylko jedną grupę, użyj zamiast tego funkcji ExtractRegEx(). Zamiast tego można użyć ExtractRegExGroup() z wartością group równą `0`.<br><br>Można określić ujemną wartość group, aby wyszukiwać dopasowania od prawej do lewej. |
| field\_no | Numer dopasowania do wyodrębnienia. Jest to przydatne, gdy w tekście można znaleźć wiele dopasowań do wyrażenia regularnego. Na przykład określ wartość `4`, aby wyodrębnić czwarte dopasowanie.<br><br>Ten argument jest opcjonalny. Domyślnie 1, jeśli nie określono. |

Przykłady funkcji

| Przykład | Wynik |
| --- | --- |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',1)` | Zwraca `abc` (pierwsza grupa pierwszego dopasowania). |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',1,2)` | Zwraca `def` (pierwsza grupa drugiego dopasowania). |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',2)` | Zwraca `123` (druga grupa pierwszego dopasowania). |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',2,2)` | Zwraca `456` (druga grupa drugiego dopasowania). |

## Kiedy używać

Możesz użyć Extract RegEx(), aby wyodrębnić informacje do wyodrębnienia z danych, które mogą również zawierać inne informacje (na przykład dowolny tekst lub ciągi JSON). Na przykład:

* Wyodrębnij adresy e-mail, numery telefonów, numery kont i inne informacje z tekstu.

* Wyodrębnij wartości liczbowe z tekstu (na przykład waluty).

* Ustandaryzuj formatowanie danych tekstowych lub liczbowych.

## Przykład 1 — skrypt ładowania do analizowania kodów transakcji

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

#### Skrypt ładowania i wyniki

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Tabela o nazwie `Transactions`, która zawiera informacje o transakcjach. Niektóre szczegóły są przechwytywane za pomocą kodów transakcji przy użyciu następującej składni:

  Rok transakcji-Źródło transakcji (tj. zakup online lub w sklepie)-Powiązane centrum dystrybucji

* Utworzenie kilku nowych pól w celu wyodrębnienia każdego szczegółu, z których każde wykorzystuje to samo złożone wyrażenie regularne.

Nasze wymagania:

* Rok może być dowolną kombinacją czterech cyfr.

* Wartości ONLINE i INSTORE są jedynymi dopuszczalnymi wartościami dla źródła transakcji.

* Centrum dystrybucji musi mieć dokładnie pięć cyfr.

Skrypt ładowania

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

Wyniki

Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:

* `RecordID`

* `TransactionCode`

* `TransactionCode_Unparsed`

* `TransactionYear`

* `TransactionSource`

* `TransactionDC`

Tabela wynikowa

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

Wyniki te podkreślają, jak argument group umożliwia ponowne użycie pojedynczego wyrażenia regularnego do wielu operacji. Pole `TransactionCode_Unparsed`, które wykorzystuje wartość group równą 0, nie zapewnia żadnej dodatkowej wartości w tym przypadku, ale jest tutaj pokazane w celu zademonstrowania funkcji.

## Przykład 2 — skrypt ładowania w celu wyodrębnienia biznesowych informacji kontaktowych

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

#### Skrypt ładowania i wyniki

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Tabela o nazwie `BusinessContactInfo`, zawierająca informacje o firmach znalezione w witrynie internetowej każdej z nich.

* `ContactInfo` to pole zawierające dowolny tekst, w tym firmowe adresy e-mail i numery telefonów.

* Utworzenie kilku nowych pól w celu wyodrębnienia każdego szczegółu, z których każde wykorzystuje to samo złożone wyrażenie regularne.

Nasze wymagania:

* Adresy e-mail muszą spełniać określony zestaw wymagań i mieć określoną składnię.

* Numery telefonów muszą być numerami NANP składającymi się z 10 cyfr. Chcemy zezwolić na ujęcie numeru kierunkowego w nawiasy, a także na spacje i myślniki w niektórych miejscach.

Skrypt ładowania

```
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');
```

Wyniki

Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:

* `CompanyName`

* `CompanyEmail`

* `CompanyPhoneNum`

Tabela wynikowa

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

To samo złożone wyrażenie regularne jest ponownie wykorzystywane do pobierania różnych informacji. Argument group określa, która z dwóch grup wyrażenia regularnego ma być przeszukiwana, a argument field\_no określa ogólne dopasowanie (w całym ciągu), które chcemy znaleźć.

Wariant funkcji ExtractRegEGroupxI() zapewnia wyszukiwanie bez uwzględniania wielkości liter.

## Przykład 3 — skrypt ładowania do wyodrębniania składników z kodów ISBN

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

#### Skrypt ładowania i wyniki

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Utworzenie zmiennej, `ISBN_RegEx`, do przechowywania wyrażenia regularnego, którego chcemy użyć do wszystkich wyodrębnień.
* Zestaw kodów ISBN książek, które księgarnia chce zamówić od kilku dostawców.

Musimy wyodrębnić następujące elementy z każdego kodu ISBN:

* EAN

* Grupa

* Rejestrujący

* Publikacja

* Suma kontrolna

Skrypt ładowania

```
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
];
```

Wyniki

Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:

* `Supplier`

* `EAN`

* `Group`

* `Registrant`

* `Publication`

* `Checksum`

Tabela wynikowa

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

## Przykład 4 — wyrażenia wykresu do wyodrębniania informacji o kontaktach biznesowych (z porównaniem ExtractRegEx())

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

#### Wyrażenia wykresu i wyniki

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Tabela o nazwie BusinessContactInfo, zawierająca informacje o firmach znalezione w witrynie internetowej każdej z nich.

* ContactInfo to pole zawierające dowolny tekst, w tym firmowe adresy e-mail i numery telefonów. Chcemy wyodrębnić każdy adres e-mail i numer telefonu za pomocą wyrażeń wykresu.

Nasze wymagania:

* Adresy e-mail muszą spełniać określony zestaw wymagań i mieć określoną składnię.

* Numery telefonów muszą być numerami NANP składającymi się z 10 cyfr. Chcemy zezwolić na ujęcie numeru kierunkowego w nawiasy, a także na spacje i myślniki w niektórych miejscach.

Skrypt ładowania

```
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');
```

Wyniki

Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj to pole jako wymiar:

* CompanyName

Dodaj następujący wymiar wyliczany w tabeli:

* 

  ```
  =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)
  ```

Tabela wynikowa

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

To samo złożone wyrażenie regularne jest ponownie wykorzystywane do pobierania różnych informacji. Argument group określa, która z dwóch grup wyrażenia regularnego ma być przeszukiwana, a argument field\_no określa ogólne dopasowanie (w całym ciągu), które chcemy znaleźć.

Wariant funkcji ExtractRegEGroupI() zapewnia wyszukiwanie bez uwzględniania wielkości liter.

## Przykład 5 — analizowanie adresów URL (z porównaniem ExtractRegEx())

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

#### Wyrażenia wykresu i wyniki

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Tabela o nazwie Correspondence, która zawiera tekst wiadomości e-mail w polu o nazwie EmailBody.

* Treść wiadomości e-mail zawierająca adresy URL stron internetowych.

Chcemy wyodrębnić drugi adres URL, jeśli jest obecny, z podziałem na następujące składniki:

* Pełny adres URL

* Protokół

* Domena

* Ścieżka

Chcemy użyć pojedynczego wyrażenia regularnego do kontrolowania wszystkich wyodrębnień.

Skrypt ładowania

```
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');
```

Wyniki

Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj to pole jako wymiar:

* ID

Dodaj następujące wymiary wyliczane:

* 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)
  ```

* Protokół 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)
  ```

* Domena 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)
  ```

* Ścieżka 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)
  ```

Tabela wynikowa

| Identyfikator | URL 2 | Protokół URL 2 | Domena URL 2 | Ścieżka 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() zwraca cały adres URL, podczas gdy ExtractRegExGroup() zwraca poszczególne części adresu URL, odpowiadające użytej wartości group. Rekord o wartości ID równej 2 zawiera tylko jeden adres URL, więc nie są dla niego zwracane żadne dane.

To samo wyrażenie regularne jest używane we wszystkich wyrażeniach wykresu do zwracania różnych informacji. Rozbicie grup zdefiniowanych w wyrażeniu regularnym wygląda następująco.

Grupy w wyrażeniu regularnym

| Numer grupy | Wyrażenie regularne | Część adresu URL |
| --- | --- | --- |
| 1 | ([a-zA-Z0-9]+) | Protokół |
| 2 | (([a-zA-Z0-9]+\.)\*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+)) | Domena (grupy 3, 4 i 5) |
| 3 | ([a-zA-Z0-9]+\.)\* | Domena główna |
| 4 | ([a-zA-Z0-9]+) | Domena najwyższego poziomu |
| 5 | ([a-zA-Z0-9]+) | Ścieżka (grupy 7, 8, 9 i 10 — opcjonalnie) |
| 6 | ((\/[a-zA-Z0-9]+)\*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))? | Podkatalog |
| 7 | (\/[a-zA-Z0-9]+)\* | Plik (grupy 9 i 10) |
| 8 | (\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?) | Plik |
| 9 | ([a-zA-Z0-9]+) | Nazwa pliku |
| 10 | (\.[a-zA-Z0-9]+)? | Rozszerzenie pliku (opcjonalnie) |

## Dowiedz się więcej

* [Praca z wyrażeniami regularnymi w skryptach ładowania i wyrażeniach wykresu](https://help.qlik.com/pl-PL/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)