Free Trial

Blog

Insights e ideias das mentes mais brilhantes em análise de dados.
pedrodrfaria
Pulsar

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:

pedrodrfaria_0-1614039164654.png

 

 

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.

  • O uso do * simboliza nenhuma ou mais de uma vez o item. Então se você não sabe se o item vai aparecer e se pode aparecer em sequência, você pode usar o * para a sua função.
  • O uso do + simboliza uma ou mais de uma vez o item. Então se você não quantas vezes o item vai aparecer e se pode aparecer em sequência, você pode usar o + para a sua função.
  • O uso de { } simboliza que o valor numérico que está dentro de colchetes será quantas vezes será repetido. Esse método é menos flexível, mas existem situações que você precisa especificar quantas vezes o caractere irá se repetir, nessas situações, a melhor opção são os colchetes. Nessa situação é escrito como por exemplo \d{3} .

 

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

pedrodrfaria_1-1614039164657.png

 

  • Então quando utilizamos (\w*) estamos procurando zero ou mais vezes um caractere de palavra, o que nos dará o primeiro nome completo até o próximo caractere que não seja um caractere de palavra, nesse caso seria o espaço entre “Pedro” e “Faria”
  • Então quando utilizamos (\w+) estamos procurando uma ou mais vezes um caractere de palavra, o que nos dará o primeiro nome completo até o próximo caractere que não seja um caractere de palavra, nesse caso seria o espaço entre “Pedro” e “Faria”
  • Então quando utilizamos (\w{3}) estamos procurando quando o caractere de palavra se repete 3 vezes consecutivas, nesse caso nos dará como resultado apenas “Ped”, para trazer o nome inteiro teremos que utilizar (\w{5})

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

pedrodrfaria_2-1614039164660.png

 

 Resultado

pedrodrfaria_11-1614041386999.png

 

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

 

pedrodrfaria_4-1614039164667.png

 

Resultado

pedrodrfaria_5-1614039164668.png

 

 

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

pedrodrfaria_6-1614039164670.png

 

Resultado

pedrodrfaria_7-1614039164671.png

 

 

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 - [^,]+

pedrodrfaria_8-1614039164675.png

 

Resultado

pedrodrfaria_9-1614039164675.png

 

pedrodrfaria_10-1614039164676.png

 

 

 

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.

 

 

 

Comentários
carlosteixeira
15 - Aurora
15 - Aurora

Sensacional. Parabéns @pedrodrfaria material ficou show.

marcusblackhill
12 - Quasar
12 - Quasar

Material muito bem feito e didático @pedrodrfaria , certeza que vai ajudar muita gente a entender um pouco melhor como usar o Regex!

Excelenteee @pedrodrfaria 

FláviaB
Alteryx Community Team
Alteryx Community Team

@pedrodrfaria, muito obrigada pela colaboração. Sempre recebemos dúvidas sobre o RegEx e também muitos usuários ainda desconhecem o poder dessa ferramenta. Já estou ansiosa pelos próximos artigos! 😀

cneivam
Cometa

Muito bom o post @pedrodrfaria , eu utilizo às vezes o website https://regexr.com/ indicado, ajuda muito na visualização do resultado, antes mesmo de inserir no Alteryx.

 

Parabéns!

mainezes
Átomo

Estou construindo meu primeiro fluxo no Alteryx e esse artigo vai me ajudar muito. Obrigada!

FláviaB
Alteryx Community Team
Alteryx Community Team

Bem-vinda à Comunidade Alteryx, @mainezes

Já aproveito para incentivá-la a explorar algumas áreas que tenho certeza que irão ajudá-la a construir muitos outros fluxos e a se familiarizar com as ferramentas do Alteryx Designer.

 

As Lições Interativas pode ser o melhor caminho para começar a conhecer os fundamentos da criação de um fluxo de trabalho. E a partir daí, fique à vontade para tirar qualquer dúvida no nosso Fórum! 😉

-Flávia Brancato

Andymesmo
Asteroide

Olá @pedrodrfaria e a todos. 

 

Sou novo com o uso da ferramenta e aqui na comunidade. Aproveitei esse post para solicitar ajuda, contudo, é exatamente o que preciso mas não estou conseguindo elaborar corretamente.

 

Gostaria de uma ajuda na alteração com RegEx da linha abaixo para todas ocorrências como |50| em cada linha que tenha |A170| junto com a informação |03|0|50| ou |03|1|50| 

 

|A170|1|10.05||2330975,16|0,00|03|0|50|2330975,16|1,65|38461,09|50|2330975,16|7,60|177154,11|61245||

|A170|1|17.02||466090,56|0,00|03|1|50|539278,33|1,65|8898,09|50|539278,33|7,60|40985,15|82440||

 

Escrevi o código abaixo mas não está alterando:

IIF(Left([Field_1],6) = "|A170|" AND Contains([Field_1], "|03|1|50|") OR Contains([Field_1], "|03|0|50|"),REGEX_Replace([Field_1], "^(.*)\\|50\\|(.*)$", "$2|56|"), [Field_1])

 

Podem por favor me auxiliar no que posso fazer? Acredito que seja lago bem simples que estou deixando passar. 

 

Obrigado. 

hugoscaper
Cometa

Boa tarde, sou novo por aqui e me deparei com uma situação que preciso trocar , por . e .por , virgula por ponto e ponto por virgula, como que ficaria a expressão regular?

Exemplo dos valores abaixo:

hugoscaper_0-1649017526181.png

 

Andymesmo
Asteroide

@hugoscaper

 

Ola,

Você pode usar a tools fórmula com a seguinte expressão:

ToString(ToNumber([Field1]), 2,1,",")

 

Espero ter ajudado.

 

Andymesmo_0-1649077148044.png

 

hugoscaper
Cometa

@Andymesmo você é fera mesmo, muito obrigado.



Andymesmo
Asteroide

Obrigado, @hugoscaper 

 

Que bom foi útil a sugestão.

 

Vamos lá:

2 retorna a quantidade de caracteres após separador de milhar.

 

1 são formatos com um separador de milhares.

Por padrão, o separador de milhares é uma vírgula, a menos que "," é especificado para decimal Separator. 0 (padrão) formata a sequência numérica sem um separador de milhares

 

Exemplo:

ToString (123456.789, 3, 1, ",") retorna 123.456, 789 como uma cadeia de caracteres.

 

Pode obter esses exemplos entre outros da documentação do Alteryx no link: https://help.alteryx.com/pt-br/20214/designer/conversion-functions.

Waldir
Átomo

Bom dia estou tentando resolver um probleminha em uma Regex que não consigo pegar a penúltima informação de uma lista exemplo:

 

index:76 - 4

index:77 - min

index:80 - km

index:82 - Rua Maria Benedita, 05

index92 - Google maps

 

Então gostaria de fazer referência apenas a penúltima linha onde está o endereço, testei esse regex: .*\s*(.*)$ mas não deu certo ele pega junto o último resultado. 

FláviaB
Alteryx Community Team
Alteryx Community Team

Oi, @Waldir

 

Recomendo postar sua dúvida também no Fórum, assim terá mais visibilidade para que outros usuários possam te ajudar. 😉

Andymesmo
Asteroide

Opa, @Waldir 

 

Não compreendi bem sua dúvida. Desculpe.

Você quer pegar a informação inteira da linha de index 82. Seria essa sua dúvida, sempre extrair a penúltima linha de uma lista? 

Ou você quer extrair apenas o endereço da linha index 82 ?

 

index:76 - 4

index:77 - min

index:80 - km

index:82 - Rua Maria Benedita, 05  (a linha inteira acima da ultima linha da lista)

index92 - Google maps

 

 

index:76 - 4

index:77 - min

index:80 - km

index:82 - Rua Maria Benedita, 05  (apenas o endereço contido na linha)

index92 - Google maps

 

 

 

Rótulos