IndexRegEx() pesquisa a string de entrada e retorna a posição inicial da enésima ocorrência do padrão de expressão regular especificado. Um terceiro argumento opcional count fornece o valor de n, que é 1 se for omitido. As posições na string são numeradas da esquerda para a direita, de 1 para cima. Se nenhuma correspondência for encontrada, a função retornará 0.
Essa função executa operações regex que diferenciam maiúsculas de minúsculas. Como alternativa, você pode usar a variante IndexRegExI() para realizar operações de regex sem distinção entre maiúsculas e minúsculas.
Sintaxe:
IndexRegEx
(text, regex [, count])
Tipo de dados de retorno: inteiro
Argumentos
Argumento
Descrição
text
O texto da string de entrada na qual você deseja procurar uma expressão regular.
regex
A expressão regular a ser usada para pesquisar a string de entrada.
count
O número da correspondência. Isso é útil quando várias correspondências para a expressão regular podem ser encontradas no texto. Por exemplo, especifique um valor de 4 para extrair a posição da quarta correspondência.
Este é um argumento opcional. O padrão é 1 se não for especificado. Você pode especificar um valor negativo para procurar correspondências da direita para a esquerda.
Exemplos de funções
Exemplo
Resultado
IndexRegEx('abc123','[a-z][0-9]+')
Retorna 3 (a posição inicial da primeira correspondência).
IndexRegEx('abc123','[a-z][0-9]+',2)
Retorna 0 (a regex não tem uma segunda correspondência).
IndexRegEx('ABC123','[a-z][0-9]+')
Retorna 0, porque IndexRegEx() diferencia maiúsculas de minúsculas.
IndexRegExI('ABC123','[a-z][0-9]+')
Retorna 3. A variante da função que não diferencia maiúsculas de minúsculas, IndexRegExI(), é usada.
Quando usar
Os casos de uso dessa função incluem:
Identificar onde padrões de texto específicos ocorrem em corpos maiores de texto. Por exemplo, você pode querer saber onde um padrão de endereço de e-mail é usado em uma série de mensagens de e-mail longas.
IndexRegEx() é particularmente útil para o processamento avançado de dados e é comumente usado na primeira etapa de uma transformação mais longa e complexa. Em geral, é mais fácil resolver problemas com outras funções regex, como ExtractRegEx(), MatchRegEx() e CountRegEx(), mas pode haver ocasiões em que IndexRegEx() ofereça soluções que essas funções não podem oferecer.
Exemplo 1 – script de carregamento para identificar livros por ISBN
Visão geral
Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova guia.
O script de carregamento contém:
Uma tabela ISBN contendo o conteúdo da mensagem de e-mail em um campo chamado EmailBody.
Queremos encontrar as posições de todos os códigos ISBN de 13 dígitos na linguagem natural da mensagem de e-mail.
Script de carregamento
SET ISBN_RegEx = 'ISBN[ ]*([0-9]{3})-([0-9]{1})-([0-9]{4})-([0-9]{4})-([0-9]{1})';
ISBN:
LOAD IndexRegEx(EmailText,'$(ISBN_RegEx)',1) AS ISBNCode1,
IndexRegEx(EmailText,'$(ISBN_RegEx)',2) AS ISBNCode2,
IndexRegEx(EmailText,'$(ISBN_RegEx)',3) AS ISBNCode3,
* INLINE `
EmailText
Hi there! I have some books that I'm interested in ordering from your distribution center. Just wanted to make sure they were in stock before I put the order in on the system - do you think you could tell me whether you have these in stock, and how many you might be able to ship us? Thanks! Item 1: ISBN 123-3-1234-1234-0. This is one I've had a really hard time getting a hold of lately. Do you think you would have 5 in stock? If not, can I put a hold on the next 5 you get? Item 2: ISBN 012-2-0123-0123-4 ... This one is not high-priority, but if you have one, I'll take it! Item 3: ISBN 000-1-0123-0123-2. Customers have been requesting this one for a long time, and we haven't had it in stock for years due to it being out of print. Any chance you might have 7 of them? Thanks!
` (delimiter is '/t/';
Resultados
Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:
ISBNCode1
ISBNCode2
ISBNCode3
Tabela de resultados
ISBNCode1
ISBNCode2
ISBNCode3
301
487
588
Exemplo 2 – expressão de gráfico para identificar contatos com números de telefone secundários
Visão geral
Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova guia.
O script de carregamento contém:
Uma tabela chamada BusinessContactInfo, que contém informações sobre empresas que foram encontradas no site de cada empresa.
ContactInfo é um campo que contém números de telefone da empresa. Queremos determinar quais empresas têm vários números de telefone disponíveis.
Nossos requisitos:
Números de telefone devem ser números de telefone da NANP com 10 dígitos.
Queremos permitir que o código de área seja colocado entre colchetes.
Queremos permitir um único espaço em branco ou hífen entre cada segmento de um número de telefone.
Script de carregamento
BusinessContactInfo:
Load * Inline `
ID CompanyName ContactInfo
1 Company A (123) 456-7890 (023) 123-4567
2 Company B 0123456790 1357913579 0246802468
3 Company C 234-567-8901
` (delimiter is '\t');
Resultados
Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esse campo como uma dimensão:
Company A tem um número de telefone secundário. Company B tem dois números de telefone secundários. Company C tem três números de telefone secundários.
Nota informativaA função MatchRegEx() também é útil para esses tipos de casos de uso de validação.
Se você encontrar algum problema com esta página ou seu conteúdo - um erro de digitação, uma etapa ausente ou um erro técnico - informe-nos como podemos melhorar!