In [1]:
# Importando o modulo de expressoes regulares
import re
In [3]:
"""
Sintax: match = re.serach(pat, text)
"""
match = re.search('iig','camado piiig')
In [5]:
# O metodo group do objeto retorna o que match encontrou
match.group()
Out[5]:
O que acontece se se nenhum padrao (pat) for encontrado? qual o retorno de match? match (que 'e um apontamento para um objeto) apontara para o que? Resposta: Para um objeto do Tipo NoneType que eh um objeto sem atributos.
Traceback (most recent call last)
<ipython-input-7-60588f6cca9c> in <module>()
----> 1 match.group()
AttributeError: 'NoneType' object has no attribute 'group'
In [6]:
# Padrao nao existente
match = re.search('iigs','camado piiig')
Vamos criar um prototipo de funcao para buscas por padrao textuais em um texto generico.
In [11]:
# Criando prototipo de funcao Find
def Find(pat, text):
match = re.search(pat,text)
if match: print match.group()
else: print('Nao encontrado')
In [13]:
Find('igs','piiig')
In [18]:
# Procurar quaisquer 3 caracteres seguidos de um g
Find('...g','piiig')
A busca usando re para na analise (da esquerda para a direita) na primeira ocorrencia do padrao. Veja no exemplo, onde esperavamos que yzg tambem casasse (match) com o padrao.
In [19]:
Find('..g','piiig muito melhor: xyzg')
In [24]:
# Procurar um periodo formado por dois pontos seguidos por tres letras
Find(':\w\w\w','bla :cat bla bla bla')
In [30]:
# Procurar 3 digitos em uma sentenca
Find('\d\d\d','bla :123xxx')
Find('\d\d\d','bla :car007xxx')
In [34]:
# Trabalhando com espacos
Find('\d\s\d\s\d','bla :1 2 3')
In [35]:
# Quando ha mais de um espaco entre o padrao, usa-se + ou *
Find('\d\s+\d\s+\d', '1 2 3')
In [36]:
# Encontrar dois pontos (:) seguidos de um periodo qualquer
Find(':\w+', 'bla bla :este_periodo bla bla')
In [37]:
# Returnar o que for a partir dos dois pontos (:)
Find(':.+', 'bla bla :este_periodo bla bla')
In [38]:
# Retornar o que for a partir dos dois pontos (:) ate encontar um espaco em branco.
Find(':\S+', 'bla bla :este_periodo123&patty=jui&m="021" bla bla')
In [60]:
# Verificando padroes de e-mail (quaisquer word antes e seguindo o @)
Find('\w+@\w+', 'blah hans.z@gmail.com usr @ serveer 1 2 3')
Para pegar o ponto usamos a notacao de conjunto [] ouseja [\w.]+ qualquer caractere mais o ponto uma ou mais vezes que aparecerem
In [48]:
Find('[\w.]+@[\w.]+', 'blah hans.z@gmail.com usr @ serveer 1 2 3')
Obtendo o usuario e o servidor do endereco de e-mail
In [57]:
# Usamos o parentesis nas partes (membros) que nos interessam
m = re.search('([\w.]+)@([\w.]+)', 'blah hans.z@gmail.com usr @ serveer 1 2 3')
#m.group()
m.group(1)
Out[57]:
In [56]:
m.group(2)
Out[56]:
In [58]:
# Quando houver mais de um email na mesma linha de analise
re.findall('[\w.]+@[\w.]+', 'blah hans.z@gmail.com usr@serveer 1 2 3')
Out[58]:
Retorne os parentesis para ver o resultado? -- Retorna uma lista de tuplas user-server
In [59]:
# Retornando uma lista de tuplas user-server
re.findall('([\w.]+)@([\w.]+)', 'blah hans.z@gmail.com usr@serveer 1 2 3')
Out[59]:
In [ ]: