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']