Guia rápido para expressões regulares

Para G Suite e Office 360 usuários e para desenvolvedores Python

(Badi James) (20 de maio de 2020)

A linguagem raramente é simples de se trabalhar ao extrair insights. Até a tarefa de encontrar e contar quantas vezes uma palavra aparece em um corpo de texto, uma tarefa que à primeira vista parece que deveria ser simples de fazer com processadores de texto modernos e bibliotecas de codificação, pode apresentar complicações rapidamente.

Veja o exemplo de tentar descobrir se o céu é mencionado em um corpo de texto. A abordagem simples seria apenas:

  • Ctrl + F “céu” (se estiver usando um editor de texto ou processador de texto)
  • “céu” em body\_of\_text (se estiver escrevendo um script em python)

No entanto, as duas abordagens nem sempre encontrarão menções ao céu e, às vezes, produzirão falsos positivos. As limitações dessas abordagens vêm de como eles procuram a sequência exata de caracteres s-k-y. Listados abaixo estão alguns recursos da linguagem que farão com que essa abordagem falhe:

  • Letras maiúsculas: se uma frase começar com “Céu” ou “Céu” aparecer como parte de um nome próprio (ou se o autor do texto tinha uma tecla caps lock quebrada) essas aparições da palavra não serão encontradas.
  • Ortografia de outras palavras: a presença de palavras como “pe sky ”,“ ri sky ”, etc. causará “Céu” seja falsamente detectado.
  • Plurais: “Céus” não será detectado.

Muitos processadores de texto e editores de texto têm opções disponíveis em “Localizar e Substitua ”funções para abordar os dois primeiros dos problemas acima. Na verdade, normalmente opções como “Ignorar maiúsculas e minúsculas” e “Corresponder palavra inteira” são ativadas por padrão. No entanto, o problema da falta de formas alternativas de uma palavra (plurais, tempos, gênero, etc.) ou ortografias alternativas (por exemplo, as muitas variações do nome Mohammad) ainda estará presente.

Com Python você pode expandir sua frase\_de\_pesquisa em corpo\_de\_texto linha de código adicionando condicionais para cobrir todas as variações da palavra e para excluir as correspondências de falso positivo. Mas isso pode ser difícil de fazer e pode tornar seu código para esta tarefa supostamente simples longo e difícil de manter.

Insira expressões regulares

Expressões regulares (ou regex para abreviar) são ferramentas poderosas para encontrar padrões de caracteres dentro do texto. A ideia é, em vez de fornecer ao seu código ou processador de texto uma sequência específica de caracteres para encontrar, você fornece um padrão (uma expressão regular) que descreve as regras que você gostaria de usar para ampliar ou restringir quais segmentos do texto correspondem o padrão fornecido.

A especificação dessas regras é obtida adicionando caracteres especiais à sua expressão regular. Veja o exemplo acima de “céu”. Uma expressão regular de “\ bsk (y | s) \ b” corresponderá a “céu” e “céus”, mas não corresponderá a “traquina”, “arriscado” ou qualquer outra palavra que contenha s-k-y. Vamos analisar a finalidade de cada um dos caracteres especiais que adicionamos:

O“ \ b ”flanqueando cada extremidade de nossa expressão especifica os limites das palavras, isto é, espaço em branco, pontuação, o início ou fim do texto, etc. Isso é o que impede a regex de corresponder a outra palavras em que “céu” faz parte da grafia (como “traquina” ou “Skype”).

O parêntese cria um grupo de captura. Isso é usado para especificar a qual parte de sua regex você gostaria de aplicar uma regra específica. Dentro deste grupo de captura, temos o “|” (também conhecido como a barra vertical). Isso atua como um operador OR, especificando que a expressão à esquerda (“y”) ou a expressão à direita (“s”) podem fazer parte de uma correspondência. Isso permite que nossa regex corresponda ao singular “céu” e ao plural “céus”.

Para abordar a questão da capitalização, geralmente isso não é um problema, pois a opção Ignorar maiúsculas e minúsculas no Find funções na maioria dos processadores de texto e editores de texto também podem ser usadas ao pesquisar usando regex. Ao usar a biblioteca Python regex re, o sinalizador e IGNORECASE pode ser usado ao pesquisar via regex (mais sobre isso mais tarde). No entanto, sem esta opção ou este sinalizador, podemos combinar “Sky”, “sky”, “Skies” e “skies” aumentando nosso regex como: “\ b (S | s) k (y | s) \ b”

Como você pode ver, as expressões regulares tornaram nossa busca pelo céu muito mais frutífera! No entanto, este foi um exemplo relativamente simples do que o regex pode fazer. Listados abaixo estão mais alguns exemplos que demonstram o poder e versatilidade das expressões regulares:

  • M (u | o) hamm? (E | a) (d | t) corresponde a mais variações ortográficas de Mohammad
  • (? Mountain) Bike corresponde a Bike , mas não Mountain Bike
  • café (?! data) corresponde café , mas não data do café
  • (https: \ / \ /)? (www \.)? [a- z0–9] + \. [az] + (\. [az] +)? corresponde a muitos urls
  • [a-zA-Z0–9 -\_.] + @ [a-zA-Z] + \. [a-zA-Z] + ( \. [a-zA-Z] +)? corresponde a muitos endereços de e-mail

regexr.com: um ótimo site para aprender Regex

Os exemplos descritos anteriormente podem ter feito você pensar “isso parece útil, mas como vou lembrar todos os diferentes especiais personagens e o que eles fazem? E como posso saber se a minha expressão regular funciona conforme o esperado? ”. Não se preocupe, regexr.com está aqui para ajudar.

Neste site você pode construir expressões regulares, usando as folhas de dicas fornecidas como guias e cole algum texto para testá-los. Todas as correspondências serão destacadas no texto e uma contagem das correspondências exibida. Seu regex é codificado por cores e dicas úteis de ferramentas descrevem o que cada personagem faz ao passar o mouse sobre eles. Isso é ótimo para aprender regex usando regex.

Usando Regex em Google Docs e Google Sheets

Usar Regex nesses aplicativos do G Suite é simples e fácil de usar. Basta pressionar Ctrl + F e clicar nos três pontos verticais na caixa de pesquisa que aparece no canto superior esquerdo do navegador. Como alternativa, navegue até Editar -> Localizar e substituir nos menus suspensos. Isso abre a janela Localizar e substituir. Aqui você encontrará a caixa de seleção Corresponder usando expressões regulares (Documentos) ou Pesquisar usando expressões regulares (Planilhas). Depois de selecionado, você pode colar sua expressão regular no campo Localizar . Todas as correspondências serão destacadas em seu documento e uma contagem de correspondências será exibida no campo Encontrar . Você ainda pode usar as outras opções de Localizar e substituir disponíveis, como Match case e seu regex se comportará de acordo.

Usando “Regex” (curingas) no MS Word e Excel

Infelizmente, as expressões regulares não são suportadas no Word e no Excel. No entanto, eles permitem “curingas”, que se comportam da mesma maneira, embora os símbolos usados ​​às vezes sejam diferentes.

No Word, a pesquisa com curingas pode ser realizada usando o recurso Localizar e substituir avançado. Detalhes sobre como navegar até este recurso, como habilitar curingas e o que cada caractere curinga faz podem ser encontrados neste guia fornecido no site de suporte do Office.

No Excel, não é imediatamente óbvio como pesquisar usando curingas, pois não faz parte de nenhum recurso de pesquisa. No entanto, você pode encontrar células que correspondem à sua frase de pesquisa contendo curingas filtrando suas planilhas usando Filtros avançados. Siga este guia do site de suporte do Office, onde você pode encontrar como usar curingas como parte de seus filtros avançados em “Critérios de curinga”.

Onde acessar Filtros avançados no Excel, que permitem o uso de curingas

Usando regex em Python

O re é fornecida como parte da instalação base do Python. Esta biblioteca oferece muitas funções que permitem analisar e manipular strings usando expressões regulares.

Algumas funções principais são:

  • re.search ( pattern, string, flags = 0 ) : procura o primeiro local na string onde padrão (sua expressão regular) corresponde, retornando um objeto de correspondência descrevendo a correspondência ou Nenhum se nenhuma correspondência for encontrada.
  • re.match ( padrão , string, flags = 0 ) : comporta-se da mesma forma que re.search (), exceto que só procura correspondências que comecem no início de string
  • re.split ( pattern, string, flags = 0 ): Divisões string em uma lista por correspondências com padrão , como o método str.split (), mas com regex.
  • re.sub ( pattern, repl, string, count = 0, flags = 0 ): Substitua as ocorrências de padrão em string por repl se repl for uma string ou pela saída de repl se repl for uma função que recebe um único objeto de correspondência como argumento

O parâmetro flags permite você deve especificar sinalizadores como re.IGNORECASE que modificam o comportamento de seus padrões de regex de acordo.

Ao escrever seus padrões de regex como strings em python, é útil usar strings brutas, pois elas permitem que você use caracteres especiais como “\” sem ter que escapar deles. Por exemplo, em vez de:

  • pattern = “\\ bsk (y | ies) \\ b”

Use:

  • pattern = r ”\ bsk (y | s) \ b”
Um exemplo da documentação re mostrando o uso de regex com lookbehind positivo

Documentação completa para re biblioteca pode ser encontrada aqui: https://docs.python.org/3/library/re.html # module-re

Boas combinações !!

Como você pode ver, as expressões regulares podem tornar muitas tarefas muito mais fáceis ao trabalhar com texto. Mesmo aprender apenas alguns caracteres especiais pode permitir muitos novos usos das ferramentas Localizar e Substituir. Muitos processadores de texto e editores de texto reconheceram sua utilidade e permitiram suporte para expressões regulares ou implementaram seus próprios recursos para fornecer funcionalidade semelhante. Familiaridade com expressões regulares é uma ferramenta útil no kit de ferramentas para qualquer escritor, desenvolvedor de software ou qualquer pessoa que analise texto com frequência.

Paleta de IA ajuda as empresas FMCG com a inovação de seus produtos. Usamos Inteligência Artificial & Aprendizado de máquina para ajudar as empresas FMCG a criar produtos que conquistam o consumidor.