Coletânea Python do ZERO às Redes Neurais Artificiais
Metacaracteres
Um dos primeiros e mais básicos metacaracteres a ser entendido é o
metacaracter “ . “ (ponto). De modo convencional o símbolo de ponto em uma string nada mais é do que mais um caractere inserido ali para dar o contexto de encerramento de uma sentença/frase. Agora, tratando-se de ponto como um metacaractere ele assume um papel bastante diferente do usual.
O metacaractere ponto é usado em casos onde estaremos realizando a
leitura de uma string simples, normalmente uma palavra, onde um determinado caractere pode ser representado por vários elementos alterando seu contexto.
Para ficar mais claro tais conceitos, vamos partir para a prática.
Inicialmente é importada a biblioteca re por meio do comando import re,
na sequência é criada uma variável de nome minha_string que recebe como atributo ‘Fernando chegará a meia noite’.
Por fim, por meio da função print( ), chamamos a função re.findall( )*,
passando dois parâmetros para a mesma, uma r’String e um objeto. Em nossa r’String, supondo que pudéssemos ter tanto a string ‘Fernando’ quanto ‘Fernanda’, note que o último caractere é a diferença das mesmas.
Sendo assim, poderíamos consultar se Fernando ou Fernanda constam no corpo daquela string, usando do metacaractere “ . “ no lugar do o ou a em questão.
Apenas finalizando, como segundo parâmetro para findall( ) passamos o objeto como referência de onde serão buscadas tais strings, nesse caso, minha_string.
O resultado como esperado, é a string ‘Fernando’.
*Iremos ver as demais funções da biblioteca regex na sequência.
Poderíamos perfeitamente duplicar o código referenciando tanto
‘Fernando’ quanto ‘Fernanda’, mas isso não é uma boa prática de programação.
Dois blocos de código realizando a mesma função significa o dobro de
processamento. Sendo assim, uma maneira de buscarmos mais de uma possível palavra em uma string é fazendo o uso do metacaractere “ | “.
No contexto de metacaracteres, o símbolo | (pipe) representa “ou”,
contextualizando para nosso exemplo, estamos buscando duas variações do mesmo nome, ou ‘Fernando’ ou ‘Fernanda’ e isso pode perfeitamente ser feito em nossa r’String.
Repare que agora em nossa r’String temos a expressão
‘Fernando|Fernanda’, em outras palavras, caso existe uma ou outra dessas palavras, a mesma será retornada por nossa função print( ).
Partindo para um exemplo um pouco mais elaborado, inicialmente
criamos uma variável de nome texto1 que recebe literalmente um texto em forma de string.
A partir da mesma vamos explorar algumas outras possibilidades.
Como já visto no exemplo inicial, usando do metacaractere . podemos
em seu lugar ter qualquer tipo de caractere.
Usando dos dois metacaracteres apresentados até o momento, note que
acabamos por contornar um possível problema de nossa string.
Se houvéssemos buscado especificamente por ‘Maria’, o interpretador iria literalmente ignorar ‘maria’ que está em outra linha do texto.
O metacaracter . serve inclusive para esse propósito, pois o mesmo recebe qualquer caractere e no caso de alfabéticos não diferencia maiúsculas de minúsculas.
Como esperado, a função findall( ) encontrou as devidas strings de nossa
variável.
Apenas concluindo esta linha de raciocínio, o metacaractere | pode ser
usado quantas vezes forem necessárias, assim como a combinação entre | e . são perfeitamente aceitáveis para qualquer r’string.
Como esperado, é nos retornadas as strings parametrizadas para findall(
).
Outro metacaractere muito comum de ser usado é o [], cuidado para não
confundir com a sintaxe padrão de uma lista em Python, quando estamos falando especificamente de expressões regulares, o símbolo [] significa um conjunto de elementos.
Usando ainda do exemplo anterior, note que no caso de ‘João” sabemos
que as possíveis alterações nessa string seriam apenas quanto ao caractere inicial ser maiúsculo ou minúsculo, dessa forma, podemos especificar via [ ] que naquela posição da string os possíveis caracteres são J ou j.
Apenas para fins de exemplo, quando estamos definindo uma expressão
regular de um conjunto de possíveis caracteres, não há limite sobre quantos ou quais caracteres poderão estar ocupando aquela posição na string.
Outra possibilidade que temos quando trabalhamos com o metacaractere
[ ] é definir um intervalo dentro do mesmo. Por exemplo, que naquele espaço possa conter qualquer caractere de a-z minúsculo ou de A-Z maiúsculo.
Em certos casos podemos nos deparar com strings totalmente
desconfiguradas quanto a seus caracteres estarem em letras maiúsculas ou minúsculas de forma aleatória.
Nesses casos é possível atribuir um terceiro parâmetro para findall( ) chamado flags que é definido como re.I, em outras palavras, essa sinalização para função findall( ) faz com que a mesma ignore o formato dos caracteres e os leia normalmente.