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

IndexRegExGroup() busca en la cadena de entrada y devuelve la posición inicial de la enésima instancia del patrón de expresión regular compuesto que se especifique. Un cuarto argumento opcional count proporciona el valor de n, que es 1 si se omite. Las posiciones de la cadena se numeran de izquierda a derecha, de 1 en adelante. Si no se encuentra ninguna coincidencia, la función devuelve 0.

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

Sintaxis:

IndexRegExGroup (text, regex, group [, count])

Tipo de datos que devuelve: Entero

Argumentos

| Argumento | Descripción |
| --- | --- |
| text | El texto de la cadena de entrada en la que desea buscar una expresión regular. |
| regex | La expresión regular que se utilizará para buscar la cadena de entrada. |
| group | El número del grupo, en el caso de una expresión regular compuesta.<br><br>Un valor de group`0` devuelve el índice del regex completo. Sin embargo, si la expresión regular solo necesita devolver el índice de toda la coincidencia, utilice en su lugar la función IndexRegEx().<br><br>Puede especificar un valor negativo group para buscar coincidencias de derecha a izquierda. |
| count | El número de la coincidencia. 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 buscar la posición de la cuarta coincidencia.<br><br>Se trata de un argumento opcional. De manera predeterminada es 1, si no se especifica. Puede especificar un valor negativo para buscar coincidencias de derecha a izquierda. |

Ejemplos de funciones

| Ejemplo | Resultado |
| --- | --- |
| `IndexRegExGroup('abc123','([a-z])([0-9]+)',0)` | Devuelve `3` (posición inicial de la regex completa). |
| `IndexRegExGroup('abc123','([a-z])([0-9]+)',1)` | Devuelve `3` (posición de inicio del primer grupo). |
| `IndexRegExGroup('abc123','([a-z])([0-9]+)',2)` | Devuelve `4`, que es la posición de inicio del segundo grupo. En el patrón regex de entrada, la cadena `([0-9]+)` corresponde al segundo grupo. |
| `IndexRegExGroup('ABC123','([a-z])([0-9]+)',1)` | Devuelve `0`, porque IndexRegExGroup() distingue entre mayúsculas y minúsculas. |
| `IndexRegExGroupI('ABC123','([a-z])([0-9]+)',1)` | Devuelve `3`. Se utiliza la variante de la función que no distingue entre mayúsculas y minúsculas, IndexRegExI(). |

## Cuándo se utiliza

Los casos de uso de esta función incluyen:

* Identificar dónde se producen patrones textuales específicos dentro de cuerpos de texto más amplios. Por ejemplo, es posible que desee saber dónde se utiliza el dominio de una dirección de correo electrónico en una serie de mensajes largos.

* IndexRegExGroup() es especialmente útil para el tratamiento avanzado de datos y suele utilizarse en el primer paso de una transformación más larga y compleja. Normalmente es más fácil resolver los problemas con otras funciones regex como ExtractRegExGroup(), MatchRegEx(), y CountRegEx(), pero puede haber ocasiones en las que IndexRegExGroup() ofrezca soluciones que estas funciones no pueden proporcionar.

## Ejemplo 1: script de carga para encontrar las posiciones de los componentes del ISBN

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/IndexRegExGroup.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.
* Un conjunto de códigos ISBN para libros que una librería quiere encargar a varios proveedores.

Para cada código ISBN, tenemos que extraer la posición inicial de cada uno de los siguientes:

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

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

En este caso, cada libro contiene componentes en las mismas posiciones.

## Ejemplo 2: expresiones de gráfico para encontrar posiciones de URL (con comparación IndexRegEx() )

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/IndexRegExGroup.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 encontrar la posición de la segunda URL, si está presente, así como las posiciones de los siguientes componentes:

* Dominio

* Ruta

Queremos utilizar una única expresión regular para realizar todas las operaciones.

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 Posición:

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

* URL 2 Posición del dominio:

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

* URL 2 Posición de la ruta:

  ```
  =IndexRegExGroup(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 Posición | URL 2 Posición del dominio | URL 2 Posición de la ruta |
| --- | --- | --- | --- |
| 1 | 274 | 281 | 295 |
| 2 | 0 | 0 | 0 |
| 3 | 298 | 306 | 327 |

IndexRegEx() devuelve la posición inicial de toda la URL, mientras que IndexRegExGroup() devuelve las posiciones iniciales de partes individuales de la URL correspondientes al valor group que hayamos utilizado. El registro con un valor de `ID` de 2 solo contiene una URL, por lo que se devuelven valores de 0.

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)