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.
Un valor de group0 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().
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.
Se trata de un argumento opcional. Por defecto 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
Descripción
Abra el editor de carga de datos y agregue el script de carga a continuación a una nueva pestaña.
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() )
Descripción
Abra el editor de carga de datos y agregue el script de carga a continuación a una nueva pestaña.
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 unas 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:
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 ID de 2 solo contiene una URL, por lo que se devuelven valores de 0.
En todas las expresiones de 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.
No dude en indicarnos en qué podemos mejorar si encuentra algún problema en esta página o su contenido, como, por ejemplo, errores tipográficos, pasos que falta o errores técnicos.