Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Manual Simples Expressões Regulares Python, Manuais, Projetos, Pesquisas de Engenharia de Petróleo

Manual de expressões regulares com Python v2.7.3. Expressão Regular. Download

Tipologia: Manuais, Projetos, Pesquisas

2012

Compartilhado em 05/09/2012

bismarck-gomes-11
bismarck-gomes-11 🇧🇷

5

(1)

3 documentos

1 / 20

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Manual Simples de
Expressões Regulares
em Python
Autor: Bismarck Gomes Souza Júnior
E-mail: bismarckjunior@outlook.com
Data: Setembro, 2012
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14

Pré-visualização parcial do texto

Baixe Manual Simples Expressões Regulares Python e outras Manuais, Projetos, Pesquisas em PDF para Engenharia de Petróleo, somente na Docsity!

Manual Simples de

Expressões Regulares

em Python

Autor: Bismarck Gomes Souza Júnior E-mail: [email protected] Data: Setembro, 2012

[email protected]

[email protected]

Módulo re (Regular Expression)

Esse módulo fornece operações com expressões regulares (ER). Para importar o módulo, basta fazer:

import re

Versão do Python

Todos os exemplos foram testados com Python v2.7.3.

Raw strings

As expressões regulares utilizam em algumas situações a contra barra (“\”), porém para utilizá-la precisam-se de 2 contra barras. Por exemplo, para usar o retrovisor em uma ER deve-se escrever: “\1”, o que representa “\1”. A fim de eliminar essa necessidade, existe a notação de raw string no Python. Ela considera cada caractere isoladamente. Para utilizá-la, basta prefixar “r” à string. Assim, enquanto r”\” contém dois caracteres (duas contra barras), a string “\” contém apenas um (uma contra barra).

Exemplo:

len(r’\’) 2 len(‘\’) 1 r’\’ ‘\\’ print r’\’ \ print ‘\’ \

Bismarck Gomes Souza Júnior

Sintaxe de ER em Python

Tipo Metacaractere Apelido Descrição Exemplo Padrão Combinações

Representantes

. Ponto^

Casa qualquer caractere, exceto "\n". (Veja a seção “ Flags ”, p. 9).

.ato gato, rato, pato, tato, mato, ... 12.30 12:30, 12-30, 12.30, 12 30, 12u30, ... <.> , , ,

, <7>, <>>, ...

[ ] Lista

Lista os caracteres possíveis. [prg]ato^ gato, rato, pato <[Bubi]> , , , Dentro da lista os metacaracteres são caracteres normais.

12[:-.]30 12:30, 12-30, 12. 1[.+/%-]3 1.3, 1+3, 13, 1/3, 1%3, 1- Intervalo numérico. [0-9]^ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 [0-36-8] 0, 1, 2, 3, 6, 7, 8 Intervalo de letras. [a-f]^ a, b, c, d, e, f [A-D] A, B, C, D Os intervalos seguem tabela ascii. [Z-a] Z, [, , ], ^, _, `, a Lista com "[" (deve ser inserida no início). (^) []inicio] ], i, n, i, c, i, o Lista com "-" (deve ser inserida no final). (^) [final-] f, i, n, a, l, -

[^ ] Lista Negada

Lista os caracteres que não são possíveis. [^0-9]!^ a!, o!,?!, #!, r!, y!, <!, ... [^kwy] Todos os caracteres exceto: k, w, y Lista negada com "^" (deve ser inserida no final). [^fim^] Todos os caracteres exceto: f, i, m, ^

Quantificadores gulosos

? Opcional Casa uma ou nenhuma ocorrência do padrão anterior.

[prg]atos? gato, pato, rato, gatos, patos, ratos </?[bip]> , , , ,

,

[Hh]?um Hum, hum, um

  • Asterisco Casa muitas ou nenhuma ocorrência do padrãoanterior.

.! oi!,ah!, !, Ei!, humm!!, oh!, ... hum* h, hm, huum, hummmm, humm, ... h[auh]* hahuah, hauhauau, h, hhuahhuahua

  • Mais Casa uma ou mais ocorrências do padrão anterior.

k+ k, kk, kkk, kkkk, kkkkkkk, ... bo+m bom, boom, boooom, ... hu+m+ hum, huum, humm, huumm, ...

{n, m} Chaves

Intervalo de repetição do padrão anterior. hum{1,3}^ hum, humm, hummm Ah!{0,2} Ah, Ah!, Ah!! Pelo menos n (^) bo{3,}m booom, boooom, booooom, ... Exatamente n bo{3}m booom

Bismarck Gomes Souza Júnior

Padrões Individuais

\A Início Casa apenas o começo da cadeia de caracteres. \AEra^ Textos que comecem com: Era \A[AO] Textos que comecem com: A ou O

\b Borda Casa as bordas das palavras. Detecta as bordas porseparação de letras.

\bera Palavras que comecem com: era \bera\b Casa a palavra "era" dentro do texto m\b Palavras que terminem com: m \B Não-borda Negação de "\b". Não casa borda py\B Casa o "py" de: python, py3, py4, pyQt, ... Não casa o "py" de: py!, .py, py., ...

\d Dígito Casa dígitos de 0 a 9. Equivalente a [0-9]. ^\d^ Linhas que começam com um dígito (\d)\1 00, 11, 22, 33, 44, 55, 66, 77, 88, 99 \D Não-dígito Negação de "\d". Não casa dígitos. Equivalente a [^0-9]. ^\D^ Linhas que não começam com um dígito. (\D)\1 ??, mm, !!, gg, pp, ...

\s Branco Casa os espaços em branco. Equivalente a [ \t\n\r\f\v]. .\s.^ a c, e r, 1 d, ... !\s[A-D]! A,! B,! C,! D \S Não-branco Negação de "\s". Não casa espaços em branco. Equivalente a [^ \t\n\r\f\v]

a\Sa aba, asa, a!a, aha, ata, a#a, ... !\s\S! A,! f,! 3,! =,! y, ...

\w Palavra Casa caracteres alfanuméricos e "". Equivalente a [a- zA-Z0-9].

(\w)\1 bb, cc, SS, 33, _, mm, ... \w\d b1, b2, g5, a3, g7, v0, d6, ... \W Não-palavra Negação de "\w". Equivalente a [^a-zA-Z0-9]. (\W)+^ !, !@, !@#, $#, $@!?, $, ... \w\W s!, D$, n?, o@, ...

\Z Fim Casa apenas o fim da cadeia de caracteres. \d\Z^ Textos que terminem com um dígito \D\Z Textos que não terminem com um dígito

[email protected]

Expressões mais modernas

Padrão (?...) Descrição Exemplo Padrão Combinações

(?#comentario)ER Insere um comentário, tal que "texto" é ocomentário.^ (?#corrigir)e.tenso^ extenso, estenso, e5tenso,...

(?iLmsux)ER

Inclui flags a partes de uma ER. (^) (?imu)[a-z]{2} Li, Na, Ka, Rb, Cs, Fr ... i (^) IGNORECASE (?i)[a-z]{2} Be, Mg, Ca, Sr, Ba, Ra, ... L LOCALE - - m MULTILINE (^) (?m)\d$ Linhas terminando com número s DOTALL (^) (?s).* Casa todo o texto u (^) UNICODE (?u)\w Casa "à", "é","ç", ... x VERBOSE (?x)\d #digito 7, 5, 3, 2, ...

(?P=id) Casa o que foi casa pelo grupo nomeado de"id".^ (?P.)(?P=inicio)^ uu,tt, mm, gg, pp, ... (?P\d\d)/(?P=dia) 12/12, 11/11, 04/04, ... (?=ER) Casar o padrão precedente somente se a ERcasar.^ Chico (?=Xavier)^ Casa "Chico" de: Chico Xavier meia (?=pp|gg) Casa "meia" de: meia pp, meia gg

(?!ER) Casar o padrão precedente somente se a ERnão casar.^ Chico (?!Xavier)^ Casa "Chico" de: Chico Anysio meia (?!m) Casa "meia" de: meia pp, meia gg (?<=ER) Casar o padrão posterior somente se a ERcasar.^ (?<=meia) pp^ Casa "pp" de: meia pp (?i)(?<=Ford) Ka Casa "ka" de: ford ka

(?<!ER) Casar o padrão posterior somente se a ERnão casar.^ (?<!meia )pp^ Casa "pp" de: Apple (?i)(?<!Ford )Ka Casa "ka" de: kaka (?:ER) Grupo ignorado pelo retrovisor. (.+)-(?:a)-(\1)^ passo-a-passo, dia-a-dia, ... (.*)-?(?:\1) mm, big-big, mal-mal, ...

(?PER) Cria um nome para o grupo: "nome". (?P[prg]ato)^ pato, rato, gato (?P[Bb]runa) Bruna, bruna

(?(id/nome)s|n)

Casa o padrão "s" se o grupo "id" ou "nome" tiver sido casado. Caso contrário, casar o padrão "n".

(<)?(\w)(?(1)>|!) ,

, h!, j!, g!, ... (?P<)?(\w)(?(n)>|!) ,

, h!, j!, g!, ... (<)?(\w)(?(1)>) b, , p,

, ...

Bismarck Gomes Souza Júnior

Funções do Módulo

  • re.compile ( pattern, flags=0 ) pattern : padrão, ER a ser casada. flags: re. IGNORECASE (re. I ), re. LOCALE (re. L ), re. MULTILINE (re. M ), re. DOTALL (re. S ), re. UNICODE (re. U ), re. VERBOSE (re. X ) retorna: re. RegexObject

Compila o pattern.

Exemplo:

import re regexobj1 = re.compile(r“\w”, re.I) # ou re.compile(“\w”, re.IGNORECASE) <_sre.SRE_Pattern object at … >

  • re.search ( pattern, string, flags=0 ) pattern : padrão, ER a ser casada. string : texto a ser scaneado. flags : re. IGNORECASE (re. I ), re. LOCALE (re. L ), re. MULTILINE (re. M ), re. DOTALL (re. S ), re. UNICODE (re. U ), re. VERBOSE (re. X ) retorna : re. MatchObject ou None

Procura a ocorrência do pattern dentro da string.

Exemplo:

import re re.search(r“\w”, ‘7s’) <_sre.SRE_Match object at … >

  • re.match ( pattern, string, flags=0 ) pattern : padrão, ER a ser casada. string : texto a ser scaneado. flags : re. IGNORECASE (re. I ), re. LOCALE (re. L ), re. MULTILINE (re. M ), re. DOTALL (re. S ), re. UNICODE (re. U ), re. VERBOSE (re. X ) retorna : re. MatchObject ou None

Procura a ocorrência do pattern no início da string. Se o pattern casar o início da string , a função retorna o re. MatchObject correspondente. Senão, retorna None.

Mesmo que a flag re. MULTILINE seja usada, esta função não irá casar o começo de cada linha e sim o começo da string.

Bismarck Gomes Souza Júnior

Exemplo:

import re re.match(r’\d’, ‘a1b2c3’) # Retorna None re.match(r’.\d’, ‘a1b2c3’) <_sre.SRE_Match object at … >

  • re.split ( pattern, string, maxsplit=0, flags=0 ) pattern : padrão, ER a ser casada. string : texto a ser scaneado. maxsplit : número máximo de “pedaços”. flags : re. IGNORECASE (re. I ), re. LOCALE (re. L ), re. MULTILINE (re. M ), re. DOTALL (re. S ), re. UNICODE (re. U ), re. VERBOSE (re. X ) retorna : lista

Fatia a string nos pontos onde o pattern casa com a string.

Quando existir grupos dentro do pattern , estes também serão adicionados à lista.

Quando o maxsplit é alcançado, é adicionado o restante da string no final da lista.

Exemplo:

import re re.split(r’q\d’, ‘a1b2c3’) [‘a’, ‘b’, ‘c’, ‘’] re.split(r’\d’, ‘a1b2c3’[:-1]) [‘a’, ‘b’, ‘c’] re.split(r’(\d)’, ‘a1b2c3’) [‘a’, ‘1’, ‘b’, ‘2’, ‘c’, ‘3’] re.split(r’(\d)’, ‘a1b2c3’, 2) [‘a’, ‘1’, ‘b2c3’] re.split(r’\w’, ‘a1b2c3’, 2) [‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’] re.split(r’\W’, ‘a1b2c3’, 2) [‘a1b2c3’]

  • re.findall ( pattern, string, flags=0 ) pattern : padrão, ER a ser casada. string : texto a ser scaneado. flags : re. IGNORECASE (re. I ), re. LOCALE (re. L ), re. MULTILINE (re. M ), re. DOTALL (re. S ), re. UNICODE (re. U ), re. VERBOSE (re. X ) retorna : lista

Retorna os valores casados em forma de lista. Se não encontrar nada, retorna uma lista vazia. Caso exista um grupo, retornar-se-á uma lista deste. Caso exista mais de um grupo, retornar-se-á uma lista de tuplas.

Bismarck Gomes Souza Júnior

Exemplo:

import re re.sub(r’\d\B’, ‘’, ‘a1b2c3’, 1)

‘ab2c3’

re.sub(r’(\d)\B’, r’\1\1’, ‘a1b2c3’)

‘a11b22c3’

def funcao(matchobj): ... if matchobj.group(0) == ‘1’: return ‘ ‘ ... elif matchobj.group(0) == ‘2’: return ‘o’ ... else: return ‘a’ ... re.sub(r’\d’, funcao, ‘a1b2c3’) ‘a boca’

  • re.subn ( pattern, repl, string, count=0, flags=0 ) pattern : padrão, ER a ser casada. repl : string ou função para substituir o pattern. string : texto a ser scaneado. count : número máximo de substiuições. flags : re. IGNORECASE (re. I ), re. LOCALE (re. L ), re. MULTILINE (re. M ), re. DOTALL (re. S ), re. UNICODE (re. U ), re. VERBOSE (re. X ) retorna : tupla com a nova string e o número de substituições feitas.

Exemplo:

import re re.subn(r’\d\B’, ‘’, ‘a1b2c3’, 4)

(‘abc3’, 2)

  • re.escape ( string ) string : texto a ser transformado. retorna : texto com “\”.

Exemplo:

import re re.escape(‘\’) ‘\\’ re.escape(‘\n’) ‘\\n’

  • re.purge ( ) Limpa o cache do módulo.

[email protected]

Classes do Módulo

re.RegexObject

Exemplo:

import re regexobj = re.compile (‘(\d)(?P\D)’, re.I)

  • search ( string[, pos[, endpos]] ) string : texto a ser scaneado. pos : posição inicial para procura endpos : posição final para procura retorna: re. MatchObject ou None
  • match ( string[, pos[, endpos]] ) string : texto a ser scaneado. pos : posição inicial para procura endpos : posição final para procura retorna: re. MatchObject ou None
  • split ( string, maxsplit=0 ) string : texto a ser scaneado. maxsplit : número máximo de “pedaços”. retorna: lista
  • findall ( string[, pos[, endpos]] ) string : texto a ser scaneado. pos : posição inicial para procura. endpos : posição final para procura. retorna : lista
  • finditer ( string[, pos[, endpos]] ) string : texto a ser scaneado. pos : posição inicial para procura. endpos : posição final para procura. retorna : iterador para re. MatchObject

[email protected]

re.MatchObject

Exemplo:

import re matchobj1 = re.match(r’(..)’, ‘a1b2c3’) #casa 1 vez matchobj2 = re.match(r’(..)+’, ‘a1b2c3’) #casa 3 vezes matchobj3 = re.search(r’(..)(?P\d\D)’, ‘a1b2c3’) matchobj4 = re.match(r’(?P\d\D)(?P\D\d)?’, ‘a1b2c3’)

  • expand ( template ) template : modelo retorna: string

Retorna a string obtida pela substituição das contra barras. O template pode utilizar as expressões como “\N” e “\g<nome/id>”, além dos escapes.

Exemplo:

matchobj1.expand(r’casa: \1’) ‘casa: a1’ matchobj2.expand(r’casa: \g<1>‘) ‘casa: c3’

  • group ( [group1, …] ) [group1, …] : id ou nome do grupo. retorna: retorna um ou mais subgrupos ou None

O número default é 0, o qual retorna toda string casada. Retorna None quando o grupo não casa nada.

Exemplo:

matchobj3.group( ) ‘1b2c’ matchobj3.group(0) ‘1b2c’ matchobj3.group(1) ‘1b’ matchobj3.group(‘dp’) ‘2c’ matchobj3.group(1, 2) (‘1b’, ‘2c’)

  • groups ( [default] ) [default] : valor a ser retornado quando um grupo não for casado. retorna: tupla com os grupos casados.

Quando o grupo não for casado, ele retorna None , a menos que o default seja indicado.

Bismarck Gomes Souza Júnior

Exemplo:

matchobj3.groups() (‘1b’, ‘2c’) matchobj4.groups() import re >>> matchobj1 = re.match(r’(..)’, ‘a1b2c3’) #casa 1 vez >>> matchobj2 = re.match(r’(..)+’, ‘a1b2c3’) #casa 3 vezes >>> matchobj3 = re.search(r’(..)(?P\d\D)’, ‘a1b2c3’) >>> matchobj4 = re.match(r’(?P\d\D)(?P\D\d)?’, ‘a1b2c3’) - expand ( template ) template : modelo retorna: string Retorna a string obtida pela substituição das contra barras. O template pode utilizar as expressões como “\N” e “\g<nome/id>”, além dos escapes. Exemplo: >>> matchobj1.expand(r’casa: \1’) ‘casa: a1’ >>> matchobj2.expand(r’casa: \g<1>‘) ‘casa: c3’ - group ( [group1, …] ) [group1, …] : id ou nome do grupo. retorna: retorna um ou mais subgrupos ou None O número default é 0, o qual retorna toda string casada. Retorna None quando o grupo não casa nada. Exemplo: >>> matchobj3.group( ) ‘1b2c’ >>> matchobj3.group(0) ‘1b2c’ >>> matchobj3.group(1) ‘1b’ >>> matchobj3.group(‘dp’) ‘2c’ >>> matchobj3.group(1, 2) (‘1b’, ‘2c’) - groups ( [default] ) [default] : valor a ser retornado quando um grupo não for casado. retorna: tupla com os grupos casados. Quando o grupo não for casado, ele retorna None , a menos que o default seja indicado. Bismarck Gomes Souza Júnior Exemplo: >>> matchobj3.groups() (‘1b’, ‘2c’) >>> matchobj4.groups() (‘a1’, None ) matchobj4.groups(‘vazio’) (‘a1’, ‘vazio’)

  • groupdict ( [default] ) [default] : valor a ser retornado quando um grupo não for casado. retorna: dicionário tal que as chaves são os nomes dos grupos.

Exemplo:

match4.groupdict( ) {'g2': None , 'g1': 'a1'} match4.groupdict(‘vazio’) {'g2': ‘vazio’, 'g1': 'a1'}

  • start ( [group] ) [group] : id ou nome do grupo. retorna: posição inicial do grupo na string recebida.

Exemplo:

matchobj3.start() 1 matchobj4.start(‘g1’) 0 matchobj4.start(‘g2’)

  • end ( [group] ) [group] : id ou nome do grupo casado. retorna: posição final do grupo na string recebida.

Exemplo:

matchobj3.end() 5 matchobj4.end(‘g1’) 2 matchobj4.end(‘g2’)

  • span ( [group] ) [group] : id ou nome do grupo. retorna: tupla com a posição inicial e final do grupo na string recebida.

Bismarck Gomes Souza Júnior

o re

O objeto da classe re. RegexObject que representa a expressão regular que gerou a classe.

Exemplo:

matchobj1.re.pattern ‘(..)’ matchobj4.re.pattern '(?P\D\d)(?P\d\D)?'

o string

Retorna a string da classe.

Exemplo:

matchobj1.string ‘a1b2c3’ matchobj4.string ‘a1b2c3’

[email protected]

Referências

[1] http://www.diveintopython.net/regular_expressions/index.html

[2] http://docs.python.org/library/re.html

[3] http://pt.wikipedia.org/wiki/Express%C3%A 3 o_regular

[4] http://en.wikipedia.org/wiki/Regular_expression

[5] http://aurelio.net/regex/guia/

[6] http://linux.studenti.polito.it/elda/elda/GNUtemberg/python/regex.pdf

[*] Todos os acessos em agosto de 2012

Site sugerido

http://www.pythonregex.com/

Críticas e sugestões

[email protected]