Como usar DataWeave e expressões regulares

Como usar DataWeave e expressões regulares

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Neste blog, veremos como uma expressão regular (regex) pode dar a você o poder de transformar texto em sua programação DataWeave. Quando você precisa selecionar, substituir, remover ou transformar texto, você pode definir um padrão regex para definir o que deseja corresponder e talvez um que defina o que você gostaria de fornecer como um substituto.

A técnica é quase tão antiga quanto o Unix, mas ainda a usamos regularmente porque funciona. Você pode usá-lo para identificar campos de texto em dados que contêm informações malformadas. Você pode usá-lo para transformar o texto em seus dados para que sempre apareça na forma canônica. Ou você pode usar uma expressão regular para definir um padrão de texto que gostaria de identificar e extrair (como uma hashtag ou um endereço de e-mail).

No DataWeave, a biblioteca principal nos oferece uma série de funções que aceitam regex devidamente formada como um argumento – você verá algumas delas neste artigo.

O que você aprenderá

Durante a exploração, você verá como fazer o seguinte:

  • Use expressões regulares para transformar uma coleção de texto simples de citações em um conjunto de dados estruturados.
  • Use o Anypoint Studio para observar iterativamente os efeitos das mudanças em sua expressão regular.
  • Use uma variedade de funções úteis da biblioteca principal do DataWeave (por exemplo, replace () with () splitBy () map () ++ ()).

Na primeira seção, pegaremos uma coleção em texto simples de citações de uma variedade de fontes. Transformamos esse texto simples em um conjunto estruturado de citações, analisando os dados com expressões regulares. Veremos algumas variações e veremos o efeito de cada uma.

Na segunda seção, expandiremos nossa abordagem considerando várias fontes de dados e as implicações que podemos ter que considerar se não controlarmos a fonte dos dados. Bem como como contabilizar variações entre plataformas na apresentação de dados de texto.

É altamente recomendável que você acompanhe em seu próprio sistema à medida que explora este tópico. Para fazer isso, você precisará de algumas coisas:

O básico das expressões regulares

Se esta é sua primeira vez trabalhando com expressões regulares, você precisará entender alguns fundamentos.

Ao pesquisar um padrão de texto usando uma expressão regular, existem ferramentas que agem da mesma maneira. Você tem certos símbolos (nós os chamamos de metacaracteres) e que representam algo diferente de seu significado literal. Aqui estão alguns que usamos o tempo todo:

Com essas ferramentas em seu ambiente de trabalho regex, você pode percorrer um longo caminho com sua própria expressão de correspondência de padrões. Podemos chamar qualquer um desses caracteres de “átomo” da expressão regular. Por falar nisso, um caractere literal simples (como “A” ou “9”) também é um átomo. Você pode usar parênteses para encapsular parte de sua expressão. Ele então se tornará um átomo que pode ser modificado ou referenciado posteriormente.

Existem vários metacaracteres em uma expressão regular que não têm significado por si só. Eles meramente quantificam outro metacaractere ou átomo de sua expressão. Nós os chamamos de “quantificadores”. Alguns metacaracteres comuns nesta família são:

Há mais uma coisa de que precisamos em nosso kit de ferramentas para lidar com variações nos dados de entrada: “asserções de largura zero”. O que isso significa é que os átomos de sua expressão regular não ocupam nenhum espaço real no buffer de destino. É comum que sejam chamados de “personagens âncora”.

Pense na ideia de um símbolo que significa “início da linha” ou “fim da linha” ou “fim da palavra”. Esses átomos podem ancorar nossa expressão a um limite ou outra característica do texto de entrada. Veremos isso mais de perto mais tarde neste artigo.

Aqui estão alguns dos “caracteres âncora” ou “afirmações de largura zero” que podemos usar:

Por padrão, quando uma expressão pode corresponder a mais de uma substring em um buffer, ela seleciona a substring mais longa, contanto que o restante da regex ainda seja satisfeito. Muitas vezes simplesmente dizemos que expressões regulares são naturalmente gananciosas.

Considere alguns exemplos e veja como essas ferramentas são combinadas. Começamos com algumas linhas simples de texto que podem ser facilmente compreendidas à primeira vista. Aqui está a nossa opinião:

Agora, vamos ver algumas expressões regulares que extraem partes do texto de entrada:

Os parênteses neste exemplo marcam parte da expressão geral para referência posterior como $[1]. Se você tiver várias partes “marcadas” da sua expressão, as partes subsequentes aparecerão como $[2] e assim por diante.

Isso ajuda a traduzir um regex em um idioma falado para entender melhor o significado. Por exemplo, você pode indicar nosso terceiro exemplo acima como “começando no início do buffer de entrada, uma série de um ou mais ‘não-dígitos’.”Ou podemos afirmar o exemplo final como:“uma série de um ou mais caracteres de dígito, seguido por um travessão literal, seguido por outra série de um ou mais caracteres de dígito que devemos lembrar como $[1]. ”

Preparação

Antes de começarmos a trabalhar com o DataWeave, precisamos fazer algumas configurações. Se você dominar essa fase, será capaz de codificar iterativamente e ver seus resultados rapidamente.

Vamos lançar o Anypoint Studio e criar um projeto vazio (ou baixar nosso projeto inicial daqui e importá-lo). Em seguida, colocaremos as amostras de dados na origem do projeto (colocá-las em / src / main / resources) para facilitar a referência. Você colocará um elemento de mensagem de transformação no projeto e o usará para operar em amostras de dados de vários tamanhos. A próxima seção descreve como fazer isso.

A entrada

Os dados que usaremos estão em um arquivo chamado quotes.txt. É um arquivo de texto simples com muitas citações, cada uma separada por uma linha em branco. (Você pode obter a fonte original aqui).

Aqui está um trecho do arquivo:

O padrão que podemos identificar é que cada citação termina com uma nova linha e, em seguida, uma linha que começa com dois travessões. Essa linha subsequente contém o nome do autor e é terminada por dois caracteres de nova linha em uma linha.

A coleção inteira é bastante longa. À medida que prototipamos e desenvolvemos, queremos trabalhar com uma pequena réplica de dados. Portanto, criaremos dois extratos mais curtos para usar em nossos testes. A seção que você vê acima, vamos pegá-la e simplesmente adicioná-la diretamente em nosso código DataWeave, atribuindo-a a uma variável.

A seguir, pegaremos uma pequena amostra do arquivo de origem (cerca de 10 citações) e podemos usá-la para testar nossa abordagem em um conjunto de dados hospedado em um sistema de arquivos, mas menor do que nossa coleção completa de registros. Vamos chamá-lo de “quotes-mini.txt”.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

Uma vez que este é um projeto de aprendizado ao invés de produção, nós simplesmente colocaremos a lista de cotações completa e a mini-versão diretamente em: / src / main / resources. Desta forma, podemos ler o arquivo diretamente de nosso CLASSPATH mais tarde.

Primeiro, colocamos um fragmento do arquivo em nosso script diretamente como uma amostra em uma variável. Abrimos um novo fluxo, trazemos um novo elemento de mensagem de transformação da paleta. Em seguida, configuramos nosso experimento para ter a seguinte aparência:

Divida o arquivo em array (pequenos dados)

Se dermos uma olhada na apresentação de visualização como vista no DataWeave, a maioria das citações contém caracteres de nova linha internamente para facilitar a leitura. Vamos transformá-los em um espaço simples e, em seguida, teremos um fluxo de texto que podemos analisar em elementos individuais.

Em particular, essas partes nos interessam:

O padrão que delimita nosso “registro” são dois caracteres de nova linha em uma linha. Se encontrarmos um único caractere de nova linha cercado em ambos os lados por um caractere diferente de espaço em branco, podemos convertê-lo em um espaço simples. Este então será nosso primeiro passo na transformação.

Para fazer isso no DataWeave, usaremos a função replace () e a função complementar with ().

Aqui está a expressão que podemos usar com replace () para fazer a transformação.

Então como você faz isso?

Identifique um padrão que consiste em um caractere de não nova linha, seguido por um caractere de nova linha e, a seguir, por um caractere de não nova linha. Lembre-se do primeiro caractere não-nova-linha como $[1], Lembre-se da segunda não-nova linha como $[2] – porque parênteses. Agora, substitua todo o padrão correspondente por apenas $[1] e $[2] separados por um espaço.

Enquanto isso, aqui está o que temos:

Modifique para lidar com finais de linha

O desafio agora é que ainda existem alguns caracteres de nova linha embutidos nas citações individuais. Agora, temos uma única string que consiste em várias citações individuais. Precisamos quebrar a string em elementos de cotação discretos. Vamos adicionar a função split () e dar a ela um padrão de expressão regular como seu argumento.

Isso nos dá uma coleção de elementos de cotação e podemos usar map () para aplicar uma última transformação a cada elemento. Aqui está o que dizemos e veja o resultado.

A adição aqui é esta frase:

Solicitamos que qualquer caractere de nova linha que esteja rodeado por caracteres “não-nova linha” seja substituído por um espaço simples no lugar da nova linha e queremos manter os caracteres “não-nova linha” originais

A função map () é executada e nos dá um array de arrays, cada um com uma citação e autor como elementos. Se parece com isso:

Observe que usamos um regex como o argumento para splitBy () em ambos os casos – observe como colocamos a string do modelo entre / em vez de aspas.

Os dados estão em uma forma racional e agora podemos usar facilmente o DataWeave para transformá-los na organização e na apresentação que eles precisam ter no final. Volte ao nosso Fórum e conte-nos o que você fez deste ponto de partida.

Etapas finais

Então, vimos como fazer algumas coisas importantes neste artigo:

  • Como configurar amostras de dados para desenvolvimento rápido. (usando readUrl ())
  • Como usar as funções replace () e with ()
  • Como formar expressões regulares

Aqui estão alguns próximos passos para você.

Primeiro, se esta foi sua primeira boa dança com expressões regulares, recomendamos que você passe algum tempo no recreio em regex101. Realmente vai valer a pena para você.

Em segundo lugar, se você não baixou e acompanhou o projeto inicial, faça-o agora. O projeto de amostra tem outras variações e percepções disponíveis.

Terceiro, inscreva-se no excelente curso Anypoint Platform Development: DataWeave. Lá, você terá a chance de explorar práticas avançadas que tornam seu código mais eficaz, com melhor desempenho e, em muitos casos, muito mais conciso.


cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
Luiz Presso
Luiz Presso