Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
Expressões Regulares (Continuação)
Metacaracteres
Metacaracteres corresponde a um conjunto de caracteres que possuem um signficado expecífico e que são interpretados de maneira especial pelo mecanismo RegEx:
Caracter []
Os colchetes permitem a inserção de um conjunto de caracteres que se deseja procurar uma correspondência. Dentro dos colchetes são colocadaos os caracteres permitidos para a correspondência.
import re
padrao = 'n[ãa]o'
texto='não é bom decorar os comandos, mas não decorar torna difiícil memorizar. nao deixe de estudar'
#Procurar os caracteres "r,s,t" no texto e retorna uma lista.
resultado = re.findall(padrao, texto) 
print('Resultado: ', resultado)
``
**Resultado:**  ['não', 'não', 'nao']
###Outro Exemplo:
``` python
import re
padrao = '[rst]'
texto='Bom programador? ler e interpretar textos aprender conceitos, não decorar comandos e fazer muitos exercícios'
#Procurar os caracteres "r,s,t" no texto e retorna uma lista.
resultado = re.findall(padrao, texto) 
print('Resultado: ', resultado)
Resultado: ['r', 'r', 'r', 'r', 't', 'r', 'r', 't', 'r', 't', 't', 's', 'r', 'r', 't', 's', 'r', 'r', 's', 'r', 't', 's', 'r', 's']
O padrão [rst] irá retornar uma lista contendo os caracteres r, s, t. 
Em vez de digitar toda a sequência, pode-se especificar o intervalo utilizando o caracter hífen (-) para separar os caracteres de inícios e fim, por exemplo:
[r-t]  = [rst] 
[1-3]  = [123]  
[0-27] = [0127] 
O caracter ^ funciona como a negação da sequência informada se for colocado no início da sequência entre colchetes: 
[^abc] significa qualquer caracter com exceção de a, b ou c. 
[^0-9] significa qualquer caracter não-dígito. 
import re 
padrao  = '[k-o]' #Seleciona os caracteres k, l, m, n, o
padrao1 = '[0-25]' #Seleciona os dígitos: 0, 1, 2, 5
padrao2 = '[^0-9 a-z]' #Seleciona os caracteres com exceção dos dígitos de 0 até 9 e letras de a até z minusculos
texto='A previsão para os próximos 30 dias é de min de 15 graus e max 25 graus'
resultado = re.findall(padrao, texto) 
print('resultado: ', resultado)
resultado = re.findall(padrao1, texto) 
print('resultado1: ', resultado)
resultado = re.findall(padrao2, texto) 
print('resultado2: ', resultado)
Resultado:
resultado:  ['o', 'o', 'm', 'o', 'm', 'n', 'm'] 
resultado1:  ['0', '1', '5', '2', '5'] 
resultado2:  ['A', 'ã', 'ó', 'é'] 
Caracteres ^ . $
Esses caracteres já apresentados em exemplo anterior, significam: 
- ^ (o caracter seguinte ao símbolo deve iniciar a sequência) 
- . (qualquer caracter substitui o ponto) 
- $ (a sequência de terminar com o caracter anterior ao símbolo) 
 Por exemplo: no padrão '^m...o$' aplicado sobre as palavras ['amarco', 'marcondes', 'amacro', 'masco'], o método de pesquisa findall() só encontra equivalência na última string, pois é a única que inicia com m e termina com o e há 3 caracteres entre eles.
Caracteres * + {} |
Esses caracteres possuem os seguintes significados: 
- * (o caracter anterior ao símbolo pode não ocorrer ou ter mais de uma ocorrência) 
- +  (o caracter anterior ao símbolo deve ter pelo menos uma ocorrência ) 
- {} (o caracter anterior as chaves deve ter o número de ocorrências especificadas dentro das chaves) 
- |  (um ou outro caracter ou sequência, ou os dois devem ocorrer na pesquisa) 
import re
txt = "Deu um abraço no laço mas alegou cansaço na carcaça para caça "
#verifica se a string contém "aç" seguido de 0 ou mais caracteres "a":
x = re.findall("aça*", txt)
print("x1 = ", x)
#verifica se a string contém "aç" seguido de 1 ou mais caracteres "a":
x = re.findall("aça+", txt)
print("x2 = ", x)
txt = "compromisso de acesso ao abcesso onde o tratamento foi sucesso"
#verifica se a string contém "es" contém necessariamento 2 caracteres "s":
x = re.findall("es{2}", txt)
print("x3 = ", x)
#verifica se a string contém "abc" ou "ess" ou os dois:
x = re.findall("abc|ess", txt)
print("x4 = ", x)
Resultados: 
x1 =  ['aç', 'aç', 'aç', 'aça', 'aça'] 
x2 =  ['aça', 'aça'] 
x3 =  ['ess', 'ess', 'ess'] 
x4 =  ['ess', 'abc', 'ess', 'ess'] 
Caractere ()
Parênteses são usados para agrupar sub-padrões. Por exemplo:Desejamos retornar os caracteres "a" ou "e" ou "i" que esteja seguidos de "st"
import re
sentenca = 'avistamos estáticos o elastico e o plastico'
#retorna qualquer sequência a ou e ou i seguido de st
resultado = re.findall(r'(a|e|i)st', sentenca)
print(matched)
Resultado:*
['i', 'e', 'a', 'a']