Como extrair e limpar textos com Power Automate

Um dos usos mais frequentes do Power Automate é manipular textos e extrair dados para realizar tarefas. Com o Power Automate, é possível extrair texto de e-mails, PDFs, imagens, Excel ou Listas do SharePoint, entre muitas outras fontes.

No entanto, esses textos geralmente precisam de algum tratamento antes de serem utilizados. Neste artigo, você aprenderá como extrair textos específicos de strings com o Power Automate, combinando expressões avançadas que resultam em um output limpo (para aprender sobre como utilizar expressões em Power Automate, veja este artigo em inglês).

Variáveis de tipo string em Power Automate

Ao longo deste artigo, trabalharemos com variáveis. As variáveis são utilizadas para armazenar e manipular dados durante a execução de um fluxo, mantendo valores temporários (se você quiser saber mais sobre como trabalhar com variáveis no Power Automate, confira este artigo).

No Power Automate, cada variável tem um tipo de dado específico, o que significa que uma variável destinada a números não pode armazenar texto, e aquelas voltadas para valores booleanos não manipularão objetos (consulte este artigo para entender quais são os tipos de dados no Power Automate e como interagir com eles). Os valores de texto possuem o tipo de dado string, e ao longo deste post, usaremos as palavras “string” e “texto” de forma intercambiável.

Para os exemplos ao longo deste artigo, usaremos o seguinte texto, armazenado em uma variável do tipo string chamada ‘main_text’:

variavel contendo texto em power automate

Aqui está o texto, caso você queira replicá-lo no seu ambiente:

The customer Digital Mill bought something for 139.99, Invoice #4452, on Monday.

Obtendo a quantidade de caracteres em um texto com Power Automate

Uma expressão muito útil no Power Automate é a length(), que retorna a quantidade de caracteres de uma string. Ela é ideal para tarefas como verificar números de documentos (como um CPF), códigos postais ou IDs de produtos. Além disso, é muito prática para definir limites de caracteres, seja para avaliações de produtos concisas ou entradas otimizadas para um modelo GPT da OpenAI.

A expressão length() requer um único parâmetro: o texto a ser verificado (a mesma expressão também pode contar elementos dentro de um array). Vamos usar a expressão para capturar o comprimento da variável ‘main_text’ e armazená-lo em outra variável chamada ‘text_length’, que deve ter o tipo de dado inteiro, já que essa expressão retorna um número inteiro:

obtendo quantidade de caracteres em texto em power automate

A saída é a quantidade de caracteres no ‘main_text’, que é 80:

resultado da quantitdade de caracteres em power automate

A expressão também funcionará para strings vazias, retornando o valor 0. Para identificar strings vazias, também é possível usar a expressão empty(), que retorna uma resposta booleana (verdadeira ou falsa). Assim como a expressão length(), a empty() requer apenas um parâmetro, que é o texto a ser verificado:

testando se string esta vazia em em power automate

Como a variável ’empty_string’ não contém nenhum texto, o resultado da expressão empty() é verdadeiro:

resultado da expressao empty em power automate

Combinando dois textos com Power Automate

No Power Automate, você também pode combinar dois textos de forma fluida. Existem dois métodos para isso: um envolve o campo de input da ação diretamente, e o outro utiliza a expressão concat(). Por exemplo, se quisermos adicionar o texto “Desciption:”  antes do conteúdo da variável ‘main_text’, podemos fazer isso inserindo o texto no input da ação seguido pelo conteúdo dinâmico de ‘main_text’ (destacado em amarelo), ou usando a expressão concat() (destacado em verde) e passando cada string como parâmetros para isso (primeiro parâmetro destacado em rosa e segundo em azul).

combinando textos em power automate

Como esperado, ambas as abordagens trazem o mesmo resultado:

textos concatenados em power automate

Localizar texto dentro de uma string em Power Automate

Existem basicamente dois métodos para identificar se uma string contém um texto específico. Um deles é a expressão contains(), que retorna um valor verdadeiro ou falso indicando a presença do texto. A expressão requer dois parâmetros: primeiro, a string onde o texto será pesquisado; e segundo, o texto a ser buscado. Neste caso, testaremos se a palavra ‘invoice’ (destacada em verde) existe dentro da variável ‘main_text’ (destacada em amarelo).

verificar existencia de texto em string em power automate

Neste exemplo específico, o retorno da expressão contains() será falso, pois estamos procurando por ‘invoice’ (com ‘i’ minúsculo), enquanto a variável contém ‘Invoice’ com ‘I’ maiúsculo:

resultado da expressao contains em power automate

Para identificar um texto ignorando letras maiúsculas ou minúsculas, basta converter a string como um todo para letras minúsculas ou maiúsculas (exploraremos essa solução em mais detalhes em uma seção posterior).

A outra estratégia para identificar textos dentro de strings é usar a expressão indexOf(). Semelhante ao contains(), essa expressão também exige dois parâmetros: a string na qual procuraremos um texto (neste caso, a variável “main_text”, destacada em amarelo) e o texto a ser buscado (neste caso, ‘Digital Mill’, destacado em verde):

identificar a posicao de caractere em power automate

Essa expressão retorna a posição do caractere onde um texto está localizado. No nosso exemplo, como o valor de retorno foi 13, o texto ‘Digital Mill’ pode ser encontrado no 14º caractere da nossa variável (como este valor é considerado “zero-indexed”, a sua contagem começa em zero):

resultado da expressao indexof em power automate

Retornando parte de um texto baseada em sua posição com Power Automate

Existem duas expressões que permitem recuperar um texto com base nas posições dos caracteres dentro de uma string.

A expressão substring() recebe três parâmetros: a string de origem, a posição inicial para a extração e a quantidade de caracteres a serem extraídos. Aqui, usaremos a variável ‘main_text’ como origem (destacada em amarelo), definiremos o valor extraído no exemplo ‘indexOf’ como a posição de início (destacada em verde, armazenamos esse valor em uma variável chamada ‘indexOf_expression’) e definiremos a quantidade de caracteres a serem extraídos como 20 (destacada em azul):

obtendo substring em power automate

O resultado será ‘Digital Mill bought ’ (com um espaço em branco no final). A expressão está capturando 20 caracteres a partir do 14º caractere da string. Embora o Power Automate use índices baseados em zero para contagem, outras operações numéricas geralmente começam no 1. Nesta expressão, o segundo parâmetro segue a convenção de indexação zero, enquanto o terceiro parâmetro não.

resultado de substring em power automate

A outra expressão, slice(), realiza a extração de texto por posições de caracteres, semelhante a substring(). No entanto, slice() retorna um texto com base em uma posição inicial e final de caracteres. Ela também recebe três parâmetros: a string de origem, a posição inicial e a posição final do texto a ser extraído. No nosso caso, usaremos novamente a variável ‘main_text’ como origem (destacada em amarelo), definiremos o valor extraído no exemplo de ‘indexOf’ como a posição inicial (destacada em verde, armazenado em uma variável chamada ‘indexOf_expression’) e definiremos a posição final como 20 (destacada em azul):

obtendo parte de texto com slice

Mesmo utilizando os mesmos parâmetros do ‘substring()’, o resultado é diferente: agora, não estamos capturando os 20 caracteres após o 14º, mas definindo a posição inicial e final (13º e 21º caracteres). O resultado é “Digital”:

output de slice em power automate

Convertendo texto para letras minúsculas ou maiúsculas com Power Automate

Uma boa prática ao extrair partes de um texto é padronizar o uso de letras maiúsculas ou minúsculas em toda a string. Isso é importante devido à sensibilidade de maiúsculas e minúsculas no Power Automate, onde “invoice” é considerado diferente de “Invoice”, como vimos em seções anteriores. Para converter um texto em letras maiúsculas ou minúsculas, podemos usar as expressões toUpper() e toLower(). Ambas as expressões recebem apenas um parâmetro, que é o texto a ser transformado. No exemplo abaixo, pretendemos transformar a string da variável ‘main_text’ em letras maiúsculas:

converter todos caracteres para maisuculas em power automate

Este será o output:

output de expressao toupper em power automate

Substituindo parte de uma string com Power Automate

Substituir textos dentro de uma string é uma tarefa fácil no Power Automate. Podemos usar a expressão replace(), que exige três parâmetros: o texto de origem, o texto a ser substituído e o novo texto. Para este exemplo, estamos usando a variável ‘main_text’ como string de origem (destacada em amarelo), ‘Monday’ como o texto a ser substituído (destacado em verde) e ‘Friday’ como o novo texto (destacado em azul):

substituir texto em string em power automate

Como resultado, teremos o texto original completo, mas com ‘Monday’ substituído por ‘Friday’:

resultado da expressao replace em power automate

Removendo espaços de um texto (trimming) no Power Automate

Ao limpar textos no Power Automate, a remoção de espaços em branco é uma das tarefas mais importantes. O processo de trimming remove todos os espaços em branco no início ou no final de um texto, mantendo apenas o conteúdo relevante. No Power Automate, essa tarefa pode ser executada com a expressão trim(), que requer apenas um parâmetro: o texto a ser limpo. No exemplo abaixo, temos espaços em branco no início do texto (destacado em amarelo), no meio (destacado em azul) e no final (destacado em verde):

remover espacos em branco ao inicio e final de texto em power automate

Após executar o fluxo, apenas os espaços em branco do meio serão mantidos, uma vez que os espaços do início e do final são removidos pela expressão trim():

resultado da expressao trim em power automate

Transformando strings em arrays no Power Automate

A última expressão que vamos estudar neste artigo é a split(). Essa expressão transformará um texto em um array, o que às vezes pode ser útil para a transformação de textos. Essa expressão requer dois parâmetros: o texto a ser dividido e o separador a ser usado para a operação. No exemplo abaixo, estamos dividindo a variável ‘main_text’ por espaços em branco (destacados em amarelo), de modo que cada palavra se tornará um elemento do array (para aprender mais sobre arrays, consulte este artigo):

dividir string em array com power automate

E este será o output:

array gerado a partir de string com power automate

Exercício: Isolando o número da fatura e o preço da variável ‘main_text’

Agora vamos praticar com um cenário de negócios comum: extrair partes específicas de um texto, que, neste caso, serão o número da fatura (invoice) e o preço da variável ‘main_text’. Precisaremos de uma variável para cada dado que queremos extrair, e elas terão algumas fórmulas aninhadas para alcançar o resultado desejado.

Apenas para lembrar, o texto armazenado na variável ‘main_text’ é o seguinte: “The customer Digital Mill bought something for 139.99, Invoice #4452, on Monday”.

Número de fatura (Invoice Number)

Como primeiro passo, precisamos identificar quais são os caracteres que estão ao redor do número da fatura (invoice), que neste caso são o “#” no início e uma vírgula no final. Como temos apenas uma ocorrência do caractere “#” em todo o texto, podemos começar por ele, usando a seguinte expressão para dividir o texto em duas partes: split(variables(‘main_text’), ‘#’).

Mas não precisaremos da primeira parte do texto (ou seja, tudo que está antes do “#”), então podemos adicionar um [1] ao final da expressão para acessar o segundo elemento do array gerado pela expressão split(): split(variables(‘main_text’), ‘#’)[1]. Lembre-se de que a contagem dos elementos do array é baseada em zero, então precisamos usar zero para acessar o primeiro elemento, 1 para acessar o segundo e assim por diante. Até este momento, o valor da nossa expressão é “4452, on Monday.”

Agora repetiremos o mesmo processo, mas usando a vírgula como separador (temos apenas uma vírgula neste texto reduzido) e acessando o primeiro elemento do array gerado pela função split(). A expressão ficará assim: split(split(variables(‘main_text’), ‘#’)[1], ‘,’)[0]. Assim, atribuiremos essa expressão a uma variável:

extrair numero de fatura com power automate

O resultado será exatamente o número da fatura:

numero de fatura obtido em power automate

Preço (Price)

O processo para extrair o preço será muito semelhante, mas utilizando separadores diferentes. Primeiro, podemos dividir a variável ‘main_text’ por vírgulas, o que resultará em um array com três elementos (repare que o valor da fatura utiliza um ponto como separador de centavos). A expressão será split(variables(‘main_text’), ‘,’), e a saída ficará assim:

[
  “The customer Digital Mill bought something for 139.99” , 
  “Invoice #4452”, 
  “on Monday.”
]

Como queremos acessar o primeiro elemento do array, incluiremos um “[0]” no final da expressão, que ficará assim: split(variables(‘main_text’), ‘,’)[0]. O output será “O cliente Digital Mill comprou algo por 139.99”.

Agora precisamos dividir novamente, mas usando um espaço em branco como separador, o que resultará em um array com 8 elementos. Poderíamos apenas usar um “[7]” no final da expressão para acessar o elemento do preço, mas na verdade há uma maneira mais fácil que evitará a necessidade de contar os elementos: a expressão last(). Esta expressão retornará o último elemento de um array, independentemente da quantidade de itens. Portanto, nossa expressão final ficará assim: last(split(variables(‘main_text’), ‘,’)[0], ‘ ‘).

extrair preco com power automate

E este será o output:

preco obtido em power automate

Conclusão

Muitos problemas de negócios podem ser resolvidos usando expressões de texto. Embora possam parecer complexas no início, o tempo que gastamos para corrigir uma expressão pode resultar em horas de economia, evitando a necessidade de executar um processo de entrada de dados manualmente.

Agora que você sabe como usar expressões de texto, pense nas tarefas diárias que você pode delegar ao Power Automate!

By Raphael Zaneti

Power Platform Developer