# ExtractRegExGroup Función de script y de gráfico

ExtractRegExGroup() extrae texto de una expresión de cadena de texto introducida utilizando el patrón de expresión regular compuesto que se especifique. Cuando utilice la función, especifique el grupo que se debe utilizar dentro de la regex compuesta. La función devuelve un valor nulo si no se encuentra ninguna coincidencia.

Si utiliza la función ExtractRegExGroup() en una sentencia LOAD y se omite field\_no, la función devolverá varios registros. Si se cargan varios campos utilizando ExtractRegExGroup(), se crean los productos cartesianos de todas las combinaciones.

Esta función realiza operaciones regex que distinguen entre mayúsculas y minúsculas. Puede utilizar alternativamente la variante ExtractRegExGroupI() para realizar operaciones regex sin distinguir mayúsculas de minúsculas.

Sintaxis:

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

Tipo de datos que devuelve: cadena

Argumentos

| Argumento | Descripción |
| --- | --- |
| text | Expresión de cadena que contiene el texto que debe extraerse en el valor de retorno. |
| regex | La expresión regular que utilizar para extraer el texto. |
| group | El número del grupo, en el caso de una expresión regular compuesta.<br><br>Si la expresión regular solo contiene un grupo, utilice en su lugar la función ExtractRegEx(). Como alternativa, utilice ExtractRegExGroup() con un valor de group`0` .<br><br>Puede especificar un valor negativo group para buscar coincidencias de derecha a izquierda. |
| field\_no | El número de la coincidencia que extraer. Esto resulta útil cuando en el texto pueden encontrarse múltiples coincidencias para la expresión regular. Por ejemplo, especifique un valor de `4` para extraer la cuarta coincidencia.<br><br>Se trata de un argumento opcional. De manera predeterminada es 1, si no se especifica. |

Ejemplos de funciones

| Ejemplo | Resultado |
| --- | --- |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',1)` | Devuelve `abc` (primer grupo de la primera coincidencia). |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',1,2)` | Devuelve `def` (primer grupo de la segunda coincidencia). |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',2)` | Devuelve `123` (segundo grupo de la primera coincidencia). |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',2,2)` | Devuelve `456` (segundo grupo de la segunda coincidencia). |

## Cuándo se utiliza

Puede utilizar Extract RegEx() para extraer información que desee aislar de datos que también puedan contener otra información (por ejemplo, texto libre o cadenas JSON).Por ejemplo:

* Extraiga direcciones de correo electrónico, números de teléfono, números de cuenta y otra información del texto.

* Extraiga valores numéricos de un texto (por ejemplo, divisas).

* Estandarice el formato de los datos textuales o numéricos.

## Ejemplo 1: script de carga para analizar códigos de transacciones

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

#### Script de carga y resultados

Vista general

Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.

El script de carga contiene:

* Una tabla denominada `Transactions`, que contiene información sobre las transacciones. Ciertos detalles se capturan con códigos de transacción utilizando la siguiente sintaxis:

  Año de la transacción-Fuente de la transacción(es decir, compra online o en tienda)-Centro de distribución asociado

* La creación de varios campos nuevos para extraer cada detalle, cada uno reutilizando la misma expresión regular compuesta.

Nuestros requisitos:

* El año puede ser cualquier combinación de cuatro números.

* Los valores ONLINE y INSTORE son los únicos aceptables para el origen de la transacción.

* El centro de distribución tiene que tener exactamente cinco dígitos.

Script de carga

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

Resultados

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue estos campos como dimensiones:

* `RecordID`

* `TransactionCode`

* `TransactionCode_Unparsed`

* `TransactionYear`

* `TransactionSource`

* `TransactionDC`

Tabla de resultados

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

Estos resultados ponen de relieve cómo el argumento group permite reutilizar una única expresión regular para múltiples operaciones. El campo `TransactionCode_Unparsed`, que utiliza un valor group de 0, no proporciona ningún valor adicional en este caso, pero se muestra aquí con el propósito de demostrar la función.

## Ejemplo 2: script de carga para extraer información sobre contactos comerciales

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

#### Script de carga y resultados

Vista general

Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.

El script de carga contiene:

* Una tabla denominada `BusinessContactInfo`, que contiene información sobre las empresas que se encontró en el sitio web de cada una de ellas.

* `ContactInfo` es un campo que contiene texto libre, incluidas direcciones de correo electrónico y números de teléfono de empresas.

* La creación de varios campos nuevos para extraer cada detalle, cada uno reutilizando la misma expresión regular compuesta.

Nuestros requisitos:

* Las direcciones de correo electrónico deben cumplir una serie de requisitos y una sintaxis específicos.

* Los números de teléfono deben ser números de teléfono NANP con 10 dígitos. Queremos permitir que el prefijo figure entre paréntesis y que haya espacios en blanco y guiones en determinados puntos.

Script de carga

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

Resultados

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue estos campos como dimensiones:

* `CompanyName`

* `CompanyEmail`

* `CompanyPhoneNum`

Tabla de resultados

| 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 misma expresión regular compuesta se reutiliza para recuperar información diferente. El argumento group especifica cuál de los dos grupos de la expresión regular hay que buscar y el argumento field\_no especifica la coincidencia global (en toda la cadena) que queremos encontrar.

La variante ExtractRegEGroupxI() de la función garantiza búsquedas sin distinción entre mayúsculas y minúsculas.

## Ejemplo 3: script de carga para extraer componentes de los códigos ISBN

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

#### Script de carga y resultados

Vista general

Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.

El script de carga contiene:

* La creación de una variable, `ISBN_RegEx`, para almacenar la expresión regular que queremos utilizar para todas las extracciones.
* Un conjunto de códigos ISBN para libros que una librería quiere encargar a varios proveedores.

Tenemos que extraer lo siguiente de cada código ISBN:

* EAN

* Grupo

* Registrante

* Publicación

* Suma de verificación

Script de carga

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

Resultados

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue estos campos como dimensiones:

* `Supplier`

* `EAN`

* `Group`

* `Registrant`

* `Publication`

* `Checksum`

Tabla de resultados

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

## Ejemplo 4: expresiones de gráfico para extraer información sobre contactos comerciales (con comparación ExtractRegEx())

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

#### Expresiones de gráfico y resultados

Vista general

Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.

El script de carga contiene:

* Una tabla denominada BusinessContactInfo, que contiene información sobre las empresas que se encontró en el sitio web de cada una de ellas.

* ContactInfo es un campo que contiene texto libre, incluidas direcciones de correo electrónico y números de teléfono de empresas. Queremos extraer cada dirección de correo electrónico y número de teléfono con expresiones de gráfico.

Nuestros requisitos:

* Las direcciones de correo electrónico deben cumplir una serie de requisitos y una sintaxis específicos.

* Los números de teléfono deben ser números de teléfono NANP con 10 dígitos. Queremos permitir que el prefijo figure entre paréntesis y que haya espacios en blanco y guiones en determinados puntos.

Script de carga

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

Resultados

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue este campo como dimensión:

* CompanyName

Añada las siguientes dimensiones calculadas a la tabla:

* 

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

Tabla de resultados

| 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 misma expresión regular compuesta se reutiliza para recuperar información diferente. El argumento group especifica cuál de los dos grupos de la expresión regular hay que buscar y el argumento field\_no especifica la coincidencia global (en toda la cadena) que queremos encontrar.

La variante ExtractRegEGroupI() de la función garantiza búsquedas sin distinción entre mayúsculas y minúsculas.

## Ejemplo 5: análisis sintáctico de varias URL (con comparación ExtractRegEx() )

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

#### Expresiones de gráfico y resultados

Vista general

Abra el Editor de carga de datos y añada el script de carga inferior en una nueva sección.

El script de carga contiene:

* Una tabla denominada Correspondence, que contiene el texto del mensaje de correo electrónico en un campo denominado EmailBody.

* Contenido del mensaje de correo electrónico que contiene las URL web.

Queremos extraer la segunda URL, si está presente, e introducirla en los siguientes componentes:

* URL completa

* Protocolo

* Dominio

* Ruta

Queremos utilizar una única expresión regular para controlar toda la extracción.

Script de carga

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

Resultados

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue este campo como dimensión:

* ID

Añada estas dimensiones calculadas:

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

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

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

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

Tabla de resultados

| ID | URL 2 | Protocolo URL 2 | Dominio URL 2 | Ruta 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() devuelve la URL completa, mientras que ExtractRegExGroup() devuelve partes individuales de la URL, correspondientes al valor de group que hayamos utilizado. El registro con un valor de ID de 2 solo contiene una URL, por lo que no se devuelve ningún dato sobre él.

En todas las expresiones del gráfico se utiliza la misma expresión regular para devolver distintos datos. El desglose de los grupos definidos en la expresión regular es el siguiente.

Grupos en la expresión regular

| Número de grupo | Regex | Parte de la URL |
| --- | --- | --- |
| 1 | ([a-zA-Z0-9]+) | Protocolo |
| 2 | (([a-zA-Z0-9]+\.)\*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+)) | Dominio (grupos 3, 4 y 5) |
| 3 | ([a-zA-Z0-9]+\.)\* | Dominio raíz |
| 4 | ([a-zA-Z0-9]+) | Dominio de nivel superior |
| 5 | ([a-zA-Z0-9]+) | Ruta (grupos 7, 8, 9 y 10) (opcional) |
| 6 | ((\/[a-zA-Z0-9]+)\*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))? | Subdirectorio |
| 7 | (\/[a-zA-Z0-9]+)\* | Archivo (grupos 9 y 10) |
| 8 | (\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?) | Archivo |
| 9 | ([a-zA-Z0-9]+) | Nombre de archivo |
| 10 | (\.[a-zA-Z0-9]+)? | Extensión del archivo (opcional) |

## Más información

* [Trabajar con expresiones regulares en scripts de carga y expresiones de gráfico](https://help.qlik.com/es-ES/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)