E ai pessoal, esse aqui vai ser o primeiro de uma mini serie de posts sobre Regex. Esse primeiro será muito mais para introduzir o que é Regex e entender um pouco mais como é usado.
Quantas vezes já ouvimos falar do termo Text Parsing? Ele é bem genérico né? Mas de um certo ponto ele não é não.
Se você quer extrair o logradouro de um endereço, como você faz?
- Se você falou usar alguma lógica de Substring/Findstring, o juiz da partida de futebol acabou de te dar uma advertência verbal.
- Escrever várias logicas IFs? Ai agora você está pedindo realmente pra levar um cartão amarelo.
- Abrir o Excel e extrair manualmente? Tá, agora você está parecendo o Zidane dando cabeçada no rival em plena final de Copa do Mundo, está pedindo o vermelho.
Se você já ficou curioso para clicar naquela aba verde logo do lado do Join nas ferramentas do Alteryx Designer, vem comigo que vamos falar da ferramenta mais legal ali, o Regex.
- Mas Pedro, que raios é Regex?
- Ué, é abreviação de Regular Expression, agora vai lá e se diverte com ela.
- Brincadeira rs.
Regex é o gol no futebol, é a última batata frita no seu lanche, é acordar cedo e perceber que tem mais 5 horas de sono. Regex é a solução dos seus problemas.
Acho que já está bom de brincadeirinhas né rs. Vamos para a parte seria, mas super legal. Vou mostrar abaixo um pouco mais do Regex para você começar a engatinhar nesse aprendizado.
Regex é uma sequência de caracteres que define um padrão de pesquisa. Normalmente, esses padrões são usados por algoritmos de pesquisa de strings para operações de "localização" ou "localização e substituição" em strings ou para validação de entrada. Em resumo, o Regex é uma lógica flexível de identificar um grupo de sequência de caracteres.
Mas então isso é uma linguagem de programação? Na verdade, não. Pense no Regex como a gramática da linguagem e não a linguagem em si.
Sabe qual é a parte mais legal do Regex? A quantidade de conteúdo/apoio que se tem online para implementar a gramatica correta do Regex. Vou listar alguns dos melhores sites para ajudar caso você tem alguma dúvida:
Para facilitar, adicionei abaixo algumas das variaveis mais utilizadas:
Simbolo | Descrição |
. | qualquer caractere, exceto a quebra de linha \n |
[ ] | qualquer caractere incluido no conjunto |
[^] | qualquer caractere não incluido no conjunto |
\d | o mesmo que [0-9], qualquer digito |
\D | o mesmo que [^0-9], qualquer caracter tirando digitos |
\s | espaço, quebra de linha, tabs etc. |
\S | o mesmo que [^ \t\n\r\f\v], qualquer caracter tirando espaços |
\w | o mesmo que [a-zA-Z0-9], caractere de palavra |
\W | qualquer caractere sem ser de palavra |
\l | letras minusculas |
\L | letras maiusculas |
\n | quebra de linha |
\t | espaçamento de tab |
\ | necessário para utilizar algum caracter que é usado como variavel (ex: " . "). Anula o significado da variavel Regex |
{n} | exatamente n ocorrências |
{n,m} | no mínimo n ocorrências e no máximo m |
{n,} | no mínimo n ocorrências |
{,n} | no máximo n ocorrências |
? | 0 ou 1 ocorrência; o mesmo que {,1} |
+ | 1 ou mais ocorrência; o mesmo que {1,} |
* | 0 ou mais ocorrência |
Já escrevi quase 400 palavras, mas até agora não falei nada de Alteryx, então vamos mostrar um pouco mais nesse lindo software.
Na categoria de Parse, você encontrará o Regex, a interface é bem simples:
Como Utilizar:
Com o Regex você poderá ou escrever utilizando as funções, \n, \d, \w, etc.. ou escrever realmente como é no texto. No contexto descrito acima, você escrever 18 ou \d+ significa a mesma coisa, mas é sempre mais interessante a utilização do \d+ simplesmente pelo fato de que assim qualquer outro digito diferente será levado em consideração em comparação com apenas escrevendo 18 que se outro digito aparecer não será considerado. Assim começamos a criar uma lógica dinâmica e flexível para o tipo de caractere que estamos procurando e não o caractere em si especificamente.
Prestar Atenção:
O uso do parêntesis é essencial para o funcionamento do Regex em algumas funções. Quando funções são escritas dentro de parêntesis, as funções são consideradas para analise, quando escrito fora, serão desconsideradas.
Length:
Porque estamos tentando identificar o sequencia de caracteres, nem sempre saberemos o length exato do texto, mas o Regex te dá ótimas soluções.
No exemplo abaixo estamos realizando um método de Parse para extrair o nome Pedro do campo “Nome”. O símbolo \w procura um caractere de palavras. Se apenas utilizarmos \w, irá procurar apenas um caractere de palavra, nesse caso seria apenas o “P”.
Note que para todos os exemplos, o segundo nome “Faria”, não aparecerá no resultado porque a nossa função não está considerando o espaço entre “Pedro” e “Faria”. Para dar certo, teria que ser “(\w*\s*\w*) ou (\w+\s+\w+) ou (\w{5}\s\w{5})
No Alteryx você terá 4 métodos diferentes de usar o Regex, vamos falar de cada um. Anexei também os exemplos por dentro do Alteryx.
Replace:
Baseado na sequencia definida, iremos identificar o campo para ser trocado. Nessa opção é importante se preocupar com a ordem da sequência de grupos diferente de caracteres. Tem que se prestar atenção para replicar exatamente como o texto está escrito para um resulto mais certeiro. Como explicado anteriormente, é necessário a utilização de parêntesis para o matching correto, o que ficar fora do parêntesis é o que não queremos que seja considerado nesta análise.
Onde podemos escolher o texto para substituir é bem interessante porque podemos seguir qualquer logica que queremos. No exemplo abaixo estamos reescrevendo totalmente o campo e ainda trocando a ordem da sequencia do grupo de caracteres, nesse caso o texto numérico agora vem no inicio da frase e não mais no fim dela.
Dica, use o $ para puxar o grupo de caracteres identificados no Regex. Nesse caso a função (\d+) é a segunda função desse Regex, assim com o $2 eu consigo chamá-la e utilizá-la de uma forma diferente do que era antes.
Configuração - (\w+)\s*(\d+)
Resultado
Parse:
Esse talvez seja o método mais utilizado. Esse método não precisa de muita explicação, ele é bem simples. Como o Replace, iremos escrever a função do Regex a fim de identificar grupos de sequencias de caracteres. Assim, com a utilização dos parênteses, iremos realizar a extração do grupo de caracteres sequenciais. Com o Parse, o objetivo é apenas extrair uma parte do texto.
No exemplo abaixo estamos extraindo o valor de data, note que estamos usando a barra “/” como separador dos dígitos no formato de data. Então apesar de que a sequencia está certa, no terceiro exemplo estamos usando o hífen “-“como separador, então não irá funcionar. É importante estar ciente de que tanto quanto a sequencia e os caracteres estarem batendo exatamente se formos escrevê-los diretamente invés de usar as funções do Regex. Para extrairmos corretamente, poderiamos utilizar alguma variavel flexivel para transformar os separadores .
Configuração - (\d*/\d*/\d*)
Resultado
Match:
Com o Match, estamos identificando se o campo de texto está exatamente como definimos o Regex. O resultado do Match é True ou False para caso a função Regex esteja no mesmo formato do que o campo de texto. O Match é muito utilizado para a verificação/revisão de uma base de dados para ver se o formato do texto está correto.
No exemplo abaixo estamos procurando para ver se no campo de texto temos 2 nomes separados por um espaço. Assim podemos ver no resultado quais nomes estão no formato correto e quais não estão.
Configuração – (\w+\s+\w+)
Resultado
Tokenize:
Esse método irá olhar para a função e gerar saídas (predefinidas) que correspondem a sequência de caracteres do campo de texto onde existe a repetição da sequência. Esse método é melhor usado quando temos a repetição da mesma sequencia de caracteres.
No exemplo abaixo, a partir de que estamos procurando por qualquer coisa que não seja uma virgula ([^,]), conseguimos quebrar em quatro linhas (ou colunas).
Configuração - [^,]+
Resultado
Bom, agora você já foi introduzido ao universo do Regex, já comprou a chuteira e a bola, falta só ir pro campinho e jogar futebol. Esse artigo foi uma introdução a utilização do Regex dentro do Alteryx. Em breve estarei lançando exemplos mais concretos de como utilizar Regex com Use Cases diferentes. Espero que tenham gostado e que se já não começaram, que comecem a utilizar o Regex.
Muito obrigado por se interessarem nesse conteudo. Estou deixando abaixo meu linkedin para caso tenham qualquer feedback ou apenas quiserem se conectar: https://www.linkedin.com/in/pedrodrfaria/
Pedro Faria.
Você deve ser um usuário registrado para adicionar um comentário aqui. Se você já estiver registrado, faça logon. Se você ainda não estiver registrado, registre-se e faça logon.