Free Trial

Base de conhecimento

Domínio de Ferramentas | RegEx

Community_Admin
Alteryx
Alteryx
Created

Este artigo faz parte da série Domínio de Ferramentas, uma compilação de contribuições da Base de Conhecimento para apresentar diversos exemplos para as ferramentas do Designer. Vamos nos aprofundar nos usos da ferramenta RegEx como parte da nossa jornada para dominar o Alteryx Designer:

 RegEx.png

A ferramenta RegEx é como o canivete suíço da análise no Alteryx; há muitas maneiras de utilizá-lo para fazer as coisas com mais rapidez ou eficácia, mas mesmo que você use apenas a lâmina, ele ainda é extremamente útil. Às vezes, isso é tudo de que você precisa, mas se você investir um tempo para descobrir como utilizar algumas outras ferramentas desse canivete, começará a perceber que não há muito que você não possa fazer com ele.

 

mr bean.pngmacgyver.jpg

Antes e depois de utilizar a ferramenta RegEx.

 

RegEx: é boa para quê?

 

RegEx é uma abreviação do termo em inglês Regular Expression, e você pode pensar nela como se fosse um outro idioma. Ela utiliza símbolos como qualquer outro idioma, mas em expressões regulares esses símbolos são usados para fazer correspondência com sequências de letras, números ou caracteres em um texto. É uma linguagem para reconhecimento de padrões.

 

Humanos são muito bons nesse tipo de coisa - digamos que eu mostre a você este bloco de texto:

 

3345 Michelson Drive, Suite 400, Irvine, CA 92612

12303 Airport Way, Suite 250, Broomfield, CO 80021

Two North Riverside Plaza, Suite 1430, Chicago, IL 60606

 

Você não teria dificuldades para me dizer que esses são endereços, nem qual parte é um número de rua ou um nome de cidade. Mas um computador só enxergaria um bloco de texto e não verificaria se possui endereços ou não. A RegEx é uma maneira de "reconhecer" dados úteis em um texto. Vamos "traduzir" isso para uma versão RegEx:

 

3345 ^/d+  O ^ significa o começo de uma linha em RegEx, então é uma boa prática incluí-lo no seu padrão inicial. Aqui, nosso padrão é /d, que significa "qualquer caractere numérico" (0-9). O + significa que queremos fazer correspondência com a expressão anterior uma ou mais vezes. Como a primeira parte do endereço é um número de rua, isso nos permite ter um número de qualquer tamanho.
Michelson Drive [^/d]+ Para fazer correspondência com a rua, temos que permitir que nossa expressão pegue várias palavras de caracteres, incluindo qualquer número de espaços, já que nomes de ruas geralmente têm mais de uma palavra. Uma maneira de fazer essa correspondência é por meio do que não esperamos encontrar, usando [^...]. Essa notação de agrupamento corresponde a "qualquer caractere não listado aqui". Ao fim, significa fazer correspondência uma ou mais vezes com qualquer caractere que não seja um número.
Suite 400 .* A próxima parte de um endereço é o número de apartamento/sala comercial, que pode ou não estar presente e pode potencialmente assumir várias convenções de nomenclatura. Para definir uma expressão flexível que corresponda a qualquer coisa que estiver ali, podemos usar um . para corresponder a "qualquer caractere". O * significa que podemos fazer correspondência a qualquer caractere zero ou mais vezes.
Irvine [^/d]+ Novamente, isso significa apenas "qualquer caractere que não seja um número". 
CA /u{2} Para fazer correspondência ao estado, podemos utilizar /u, que significa "qualquer letra maiúscula". Como se espera que a sigla do estado sempre seja uma sequência de duas letras, também podemos especificar o tamanho da correspondência utilizando {...} após nossa expressão, ou seja, "corresponder a quaisquer duas letras maiúsculas".
92612 /d{5}$ O código postal também será composto por 5 dígitos, portanto, podemos fazer algo semelhante para dizer "faça correspondência com cinco caracteres numéricos". Em seguida, podemos adicionar $ para dizer que esse deve ser o fim da linha atual

 

 

RegEx1 - Syntax.png

 

 

Ferramentas básicas


Existe uma grande quantidade de símbolos que são utilizados para elaborar expressões RegEx, mas o Alteryx fornece uma boa "cola" na ferramenta para você.

 

Você não precisa muito mais do que isso para começar a usar a RegEx e, como normalmente é no Alteryx, você descobrirá que existem muitas maneiras de criar uma expressão que corresponda a um padrão. Portanto, não se preocupe muito com os detalhes e não tenha medo de passar algum tempo aprendendo com o bom e velho método de "tentativa e erro".

 

Para guias mais completos sobre RegEx, consulte também o Guia Boost-Extended Format String Syntax, assim como o Guia de Sintaxe Perl RegEx.

 

O Alteryx estruturou a funcionalidade da RegEx em quatro métodos: Corresponder, Analisar, Substituir e Tokenizar.

 

Se você quiser acompanhar os exemplos a seguir no Designer, baixe o fluxo de trabalho em anexo regex.yxmd (salvo na versão 2019.1).

 

Corresponder

 

O método Corresponder simplesmente verifica se uma cadeia de caracteres pode ser descrita pela expressão regular fornecida e gera um Verdadeiro (True) ou Falso (False). Vamos utilizar os elementos da expressão da tabela acima para fazer a correspondência com os nossos endereços. É possível criar uma expressão longa apenas juntando esses elementos e incluindo espaços /s e vírgulas , onde quer que apareçam.

 

RegEx2 - Match - No group.png

 

Os dois primeiros endereços correspondem bem utilizando essa expressão, mas o terceiro se desvia do que esperávamos ver e falha. Devido a uma regra obscura sobre edifícios que compartilham um nome com seus endereços, o número da rua está escrito por extenso e nossa expressão regular é incapaz de fazer a correspondência.

 

A chave para escrever uma boa RegEx é prever essas exceções em seus dados e levá-las em conta dentro da expressão. Para corresponder ao número por extenso, "Two", nesse endereço, vamos colocar outra expressão para verificar se ela falhará ao tentar fazer a correspondência. A maioria dos endereços nos Estados Unidos começa com caracteres numéricos, mas, se não começarem, esta expressão procurará por uma palavra. Veja como fica:

 

(?:^/d+)|(?:^/w+)

 

Isso é muito mais simples do que parece e, na verdade, apenas dois símbolos de RegEx adicionais são utilizados. O símbolo de barra vertical I significa "ou". Por exemplo, a|b verificaria apenas se a faz correspondência e, se não fizer, se b faz. O segundo símbolo é (?:...), também conhecido como grupo não marcado. É apenas uma maneira de agrupar esses elementos para a operação ou.

 

 

RegEx3 - Match - Group.png

 

Em resumo, este primeiro grupo (?:^/d+) está apenas fazendo a mesma coisa de antes, mas, quando ele falha, a expressão tenta fazer correspondência usando o segundo grupo (?:^/w+). Isso nos permite fazer a correspondência com a versão por extenso do nosso endereço acima sem problemas.

 

Para saber mais sobre Corresponder:

Crédito extra: existem muitas maneiras de estruturar a RegEx; comente abaixo com uma alternativa melhor para (?:^/d+)|(?:^/w+). Por que ela é melhor?

 

Analisar

 

O método Corresponder é bom porque você pode usá-lo para validação, mas no método Analisar é realmente quando a RegEx brilha, permitindo que você extraia informações úteis de um bloco de texto. A ferramenta RegEx torna isso fácil - tudo o que precisamos é colocar parênteses (...) em torno de cada coisa que queremos extrair. São os chamados grupos marcados - a contrapartida para os nossos grupos não marcados acima (?:...).

 

RegEx4 - Parse.png

 

À medida que os parênteses são digitados, eles aparecem em uma janela de campos de saída semelhante à ferramenta Selecionar, o que permite renomear os campos e alterar os tipos de dados (aprenda a formatar seus dados com esta lição interativa).

 

Para saber mais sobre Analisar:

 

Substituir

 

Como é possível constatar, o método Analisar é realmente apenas uma extensão do método Corresponder que nos permite extrair o texto e colocá-lo em uma nova coluna. Bem, o que acontece quando estendemos esse conceito e nos perguntamos: "Como posso colocar as coisas de volta?" É aí que entra o método Substituir.

 

Com Substituir, podemos analisar componentes de nossa cadeia de caracteres, substituí-los e até reorganizá-los. Podemos fazer isso especificando grupos marcados para indicar à ferramenta RegEx o que substituir e onde, em uma linguagem que qualquer um possa entender...

 

dollah bills

 

A preguiça de terno está absolutamente certa, é claro, podemos usar símbolos de dólar $ juntamente com números para especificar exatamente cada grupo marcado. Por exemplo, $1, $2, e $3 se referem ao primeiro, segundo, e terceiro grupos marcados, respectivamente. Então, para a nossa lista de endereços, se quiséssemos apenas analisar uma lista de cidades e estados, poderíamos digitar a expressão $4, $5.

 

RegEx5 - Replace.png

 

Observe que conseguimos adicionar nossa própria vírgula ali, e também um espaço, simplesmente digitando-os na caixa de texto. O método Substituir é bastante flexível e você também pode utilizá-lo na ferramenta Fórmula com a função Regex_Replace.

 

Para saber mais sobre Substituir:

 

Tokenizar

 

A RegEx é muito eficaz quando as coisas nos são dadas em uma lista bonita e organizada, mas o que acontece se todos esses endereços fossem despejados sem a menor cerimônia por alguma chamada de API ou base de dados como um único bloco de texto?

 

3345 Michelson Drive, Suite 400, Irvine, CA 92612,12303 Airport Way, Suite 250, Broomfield, CO 80021,Two North Riverside Plaza, Suite 1430, Chicago, IL 60606

 

Bem, isso não é muito útil - está tudo delimitado por vírgula, mas não existe uma maneira fácil de saber quando um endereço termina e outro começa. O que precisamos aqui é do método Tokenizar, que vai pegar esse texto e dividi-lo em colunas ou linhas, de maneira muito semelhante à ferramenta Texto para Colunas (aprenda mais sobre ela nesta lição interativa). Existem duas diferenças importantes que definem o Tokenizar da RegEx:

  1. Em vez de fazer a correspondência com o que você não quer (como uma vírgula), você faz correspondência com o que você quer (todo o resto).
  2. Você tem a opção de escolher o que é dividido e o que é ignorado utilizando um grupo marcado

Isso pode parecer confuso, mas na verdade dá muito mais flexibilidade sobre onde/como você divide seus dados. Para ilustrar, vamos dividir nosso texto de endereços em várias linhas, utilizando a vírgula como nosso delimitador.

 

RegEx6 - Tokenize red.png

 

 

Como temos que fazer correspondência com tudo o que queremos, precisamos utilizar a expressão (.+?)(?:,|$). Vamos examiná-la em partes:

  • .+ significa qualquer caractere . que faça correspondência uma ou mais vezes +
  • ? é como dizemos que esta correspondência deve ser preguiçosa em vez de ambiciosa. Essa é uma distinção bastante útil, que pode ser um pouco difícil de entender no início, mas, para os propósitos deste curso rápido, vamos nos concentrar apenas no que ? significa: faça a correspondência do que quer que seja antes de zero vezes (ou seja, não faça) ou antes de exatamente uma vez.
  • O sinal de mais + é, na verdade, o oposto: é um símbolo ambicioso, portanto, o caractere anterior . tentará fazer correspondência uma ou mais vezes. Então, o que significa quando dizemos para algo ambicioso ser preguiçoso? Bem, na verdade, isso modifica o quanto ele pode ser ambicioso, forçando-o a olhar para a próxima correspondência. Então, o que .+? realmente significa é:
    "faça a correspondência a um caractere uma ou mais vezes até que você possa corresponder ao que vem a seguir".
  • O que vem a seguir é um grupo não marcado (?:,|$) que essencialmente funciona como uma placa de PARE para o (.+?) anterior. Como não está no grupo marcado, não estará presente no resultado. Está apenas em um grupo não marcado, para que solicitemos que procure ou por uma vírgula , ou pelo fim da linha $ no final do texto.

Ufa - quanta informação! Fique a vontade para aproveitar esta oportunidade para alongar-se, dar uma caminhada ou meditar.

 

line noise.gif

 

Obviamente, a ferramenta Texto para Colunas pode dividir usando uma vírgula de maneira mais fácil do que o apresentado acima, mas a flexibilidade de Tokenizar vem à tona quando tentamos fazer algo um pouco mais útil. Por exemplo, podemos usar esse método para dividir aquele bloco de informações de endereço nos três endereços originais.

 

RegEx7 - Tokenize green.png

 

 

Nesse caso, estamos apenas utilizando a última expressão correspondente ao código postal /d{5} para marcar onde cada correspondência termina. Como mencionado acima, sabemos que cada linha terminará ou com uma vírgula, ou com o fim da linha, e podemos usar aqui (?:,|$) para dividi-las com sucesso. No exemplo acima, optei por mostrar a capacidade de ? fazer correspondência zero ou uma vez para substituir isso - para que possamos dividir em uma "vírgula opcional" após a correspondência com o grupo marcado.

 

Para saber mais sobre Tokenizar:

Crédito extra: o ,? não funcionará no caso anterior, dividindo apenas por vírgula - (.+?),? em vez de (.+?)(?:,|$). Por quê?

Comente abaixo com uma explicação para glória eterna e o direito de se vangloriar.

 

regex.png

 

A esta altura, você já deve ter a proficiência de um expert na ferramenta RegEx! Agora, se você já é um especialista em outras ferramentas do Designer, contribua para o Blog da Comunidade compartilhando suas experiências e nos contando como e para que você usa as nossas ferramentas no seu dia a dia. Se tiver interesse em contribuir com um Blog, envie um email para flavia.brancato@alteryx.com para ter acesso à seção.

 

Toda segunda-feira vamos trazer uma ferramenta nova para a nossa seleção. Com isso, adoraríamos saber qual é a sua favorita ou qual ferramenta você gostaria de ver aqui na Comunidade na próxima semana. Não esqueça de se inscrever no painel da Base de Conhecimento para ser notificado das novidades!

 

*Este texto é uma adaptação do artigo original escrito por @AlexKo na Comunidade em inglês

Anexos
Comentários
FláviaB
Alteryx Community Team
Alteryx Community Team

Exatamente, @Angela_Menegassi, obrigada! Inclusive, já vou aproveitar para mover o post lá para o Fórum. @FábioCisco! 😉 

Rótulos