SlideShare una empresa de Scribd logo
1 de 45
Expressões Regulares:
Um canivete suíço para processamento de textos


           III Encontro do PUG-PE
               Marcel Caraciolo


                                    III Encontro do PUG-PE
O que são Expressões
       Regulares ?
Também chamado de regex ou regexp

Ferramenta eficiente para processamento de
palavras em texto por meio de casamento
padrões.

Linguagem formal que pode ser interpretada
por um processador de expressões regulares
ou por um programa que identifica partes do
texto que “casam”com uma especificação
provida. - Wikipedia
                               III Encontro do PUG-PE
O que são Expressões
    Regulares ? (Exemplos)

Sequência de caracteres ‘car’ em qualquer
conteto, como em “car”, “cartoon”, “bicarbonate”

A palavra “car” quando aparece isoladamente

A palavra “car” quando precedida de “blue” or
“red”

Símbolo $ seguido por 1 ou mais dígitos, e após,
opcionalmente, um . seguido por mais 2 dígitos.
                                   III Encontro do PUG-PE
Mas antes um pouco de
         História...
Estão na teoria dos automâtos e linguagens
formais

Descrição e classificação de linguagens formais

Na década de 50, Stephen Kleene criou sua
notação (conjuntos regulares) formando a
algébra de Kleene

Realmente usáveis a partir da biblioteca escrita
para tcl e Perl, definindo a PCRE.
                                   III Encontro do PUG-PE
Python e Expressões Regulares



O módulo re é o responsável!


     Mas por onde começamos ?!




                               III Encontro do PUG-PE
re - Elementos básicos
a,X, 9 caracteres normais, casam com eles mesmos exatamente

    . casam com qualquer caractere exceto n

   w casam com qualquer letra ou dígito ou _ [a-zA-Z0-9_]. Apenas 1 caractere!!!

   W casam com qualquer não caractere (o complemento de w)

   b casa a separação de palavras.

   s casa com o caractere espaço em branco, quebra de linha, tab, form [ nrtf].

   S casa com qualquer não caractere acima [ complemento de s]

   t n r - tab newline e return

   d digitos [0-9]

   ^ início ou $ fim - casam com o início ou fim da string

    Inibe os caracteres especiais acima.
       Ex: . (casa com um ponto) ,  (casa com uma  ).
                                                               III Encontro do PUG-PE
re - Alguns comandos básicos

       match = re.search(pat, str)


re.search() - Recebe uma expressão regular e uma
   string. Procura por padrões que satisfazem a
                especificação dada.



                                 III Encontro do PUG-PE
re - Alguns comandos básicos
    str = 'an example word:cat!!'
    match = re.search(r'word:www', str)
    # O if testa se o search obteve sucesso.
      if match:                      
        print 'found', match.group() ## 'achou word:cat'
      else:
        print 'did not find'



Retorna None se a busca foi falha. Senão retorna
               um objeto match

                                            III Encontro do PUG-PE
search - Algumas regras básicas

 A busca varre sobre a string do ínicio ao fim,
 interrompendo no primeiro match encontrado.

Todo o padrão tem que ser satisfeito e não toda
                   string.

  match.group() retorna o texto identificado.

                                  III Encontro do PUG-PE
re - Alguns comandos básicos
      ## Search for pattern 'iii' in string 'piiig'.
      ## All of the pattern must match, but it may appear anywhere.
      ## On success, match.group() is matched text.

      match = re.search(r'iii', 'piiig') =>  found, match.group() == "iii"
      match = re.search(r'igs', 'piiig') =>  not found, match == None

      ## . = any char but n
      match = re.search(r'..g', 'piiig') =>  found, match.group() == "iig"

      ## d = digit char, w = word char
      match = re.search(r'ddd', 'p123g') =>  found, match.group() == "123"
      match = re.search(r'www', '@@abcd!!') =>  found, match.group() == "abc"




Retorna None se a busca foi falha. Senão retorna
               um objeto match
                                                         III Encontro do PUG-PE
re - Repetição

+ Uma ou mais ocorrências do elemento precedente ex: i+ (1 ou mais ‘i’s)
* 0 ou mais ocorrências do elemento precedente
? Casa 0 ou 1 ocorência do elemento precedente




                                                    III Encontro do PUG-PE
re - Repetição



      São operadores Greedy e LeftMost

Tentam achar o padrão mais à esquerda e tentam
      consumir a string o máximo possível.



                                 III Encontro do PUG-PE
re - Repetição
## i+ = one or more i's, as many as possible.
  match = re.search(r'pi+', 'piiig') =>  found, match.group() == "piii"

    ## Finds the first/leftmost solution, and within it drives the +
    ## as far as possible (aka 'leftmost and largest').
    ## In this example, note that it does not get to the second set of i's.
    match = re.search(r'i+', 'piigiiii') =>  found, match.group() == "ii"

    ## s* = zero or more whitespace chars
    ## Here look for 3 digits, possibly separated by whitespace.
    match = re.search(r'ds*ds*d', 'xx1 2   3xx') =>  found, match.group() == "1 2   3"
    match = re.search(r'ds*ds*d', 'xx12  3xx') =>  found, match.group() == "12  3"
    match = re.search(r'ds*ds*d', 'xx123xx') =>  found, match.group() == "123"

    ## ^ = matches the start of string, so this fails:
    match = re.search(r'^bw+', 'foobar') =>  not found, match == None
    ## but without the ^ it succeeds:
    match = re.search(r'bw+', 'foobar') =>  found, match.group() == "bar"



                                                                  III Encontro do PUG-PE
re - Alguns comandos básicos
          pattern = re.compile(pat)
               pattern.match(str)

re.compile() - Permite compilar a expressão regular e
           retorna um objeto SRE_Pattern
re.match() - retorna None se a string não atender as
   especificações e ao contrário um objeto Match.


                                     III Encontro do PUG-PE
Exemplos práticos

          Temos o texto a seguir:

 'xyz alice-b@google.com purple monkey'


Como extrairmos o e-mail deste e-mail ?!




                                III Encontro do PUG-PE
Exemplos práticos

                     Tentativa 01

                     r'w+@w+':

Entrada: 'xyz alice-b@google.com purple monkey'

 Saída:   b@google


                                    III Encontro do PUG-PE
Exemplos práticos

    str = 'purple alice-b@google.com purple monkey'
    match = re.search(r'w+@w+', str)
    if match:
      print match.group()  ## 'b@google'




        Problema! w não captura . ou -



                                             III Encontro do PUG-PE
Antes..

 [ ] - Lista de caracteres. Casa uma ocorrência de
qualquer caractere na lista. [abc] casa ‘a’, ‘b’ou ‘c’.
 Define Intervalos de caracteres ex: [a-z] ou [0-9]
                     Caracteres

   Caracteres especiais como - ou .
   são considerados literais dentro
               da lista.
                                      III Encontro do PUG-PE
Exemplos práticos

                  Tentativa 02

            r'[w.-]+@[w.-]+'

Entrada: 'xyz alice-b@google.com purple monkey'

 Saída:   alice-b@google.com


                                 III Encontro do PUG-PE
Exemplos práticos

       match = re.search(r'[w.-]+@[w.-]+', str)
       if match:
         print match.group()  ## 'alice-b@google.com'



   PS: [ˆ ] Lista negada de caracteres. Casa uma
ocorrência de qualquer caractere nõ contido na lista.

 [^abc] - qualquer caractere exceto ‘a’ou ‘b’ ou ‘c

                                               III Encontro do PUG-PE
Exemplos práticos
Show! Mas agora eu quero pegar partes específicas
              do e-mail, e agora?!
     'xyz alice-b@google.com purple monkey'


               login e domínio




                                  III Encontro do PUG-PE
O group() irá nos ajudar!


match.group(int) - Permite capturar partes
   específicas do texto (subexpressões).


( ) - Delimita grupos de captura
dentro do padrão a ser extraído.


                              III Encontro do PUG-PE
Exemplos práticos


       r'([w.-]+)@([w.-]+)'

Entrada: 'xyz alice-b@google.com purple monkey'

        alice-b@google.com #match.group()
 Saída: alice-b            #match.group(1)
        google.com         #match.group(2)

                                III Encontro do PUG-PE
Exemplos práticos

    str = 'purple alice-b@google.com monkey dishwasher'
    match = re.search('([w.-]+)@([w.-]+)', str)
    if match:
      print match.group()   ## 'alice-b@google.com' (the whole match)
      print match.group(1)  ## 'alice-b' (the username, group 1)
      print match.group(2)  ## 'google.com' (the host, group 2)




Ferramenta útil para extração de cadeias de
     caracteres específicas do padrão.


                                                      III Encontro do PUG-PE
re - Comandos básicos

            re.findall(patt,str)



re.findall() - Retorna todas as strings que casam
          com a especificação desejada.
  Retorna uma lista de strings, onde cada string
        representa um padrão encontrado.

                                  III Encontro do PUG-PE
Exemplos práticos


  ## Suppose we have a text with many email addresses
  str = 'purple alice@google.com, blah monkey bob@abc.com blah dishwasher'

  ## Here re.findall() returns a list of all the found email strings
  emails = re.findall(r'[w.-]+@[w.-]+', str)
  ## ['alice@google.com', 'bob@abc.com']
  for email in emails:
    # do something with each found email string
    print email




                                                     III Encontro do PUG-PE
Exemplos práticos

  E se minha string fosse um arquivo-texto?!

re.findall() continua sendo uma ótima solução!

    # Open file
    f = open('test.txt', 'r')
    # Feed the file text into findall();
    #it returns a list of all the found strings
    strings = re.findall(r'some pattern', f.read())



                                       III Encontro do PUG-PE
findall() e group() juntos!
    Grupos de Captura ( ) combinado findall()


    Retorna uma lista de tuplas. Cada tupla
representando um padrão encontrado, onde cada
   elemento representa group(1), group(2), ...




                                  III Encontro do PUG-PE
Exemplos práticos

      Voltando para o nosso exemplo do e-mail

'purple alice@google.com, blah monkey bob@abc.com blah dishwasher'


  Se quisermos partes específicas dos padrões?!

    Vamos montar nossa expressão regular!



                                               III Encontro do PUG-PE
Exemplos práticos

                              Tentativa 02

               r'([w.-])+@([w.-]+)'

Entrada: 'purple alice@google.com, blah monkey bob@abc.com blah dishwasher'
   Saída:     [('alice', 'google.com'), ('bob', 'abc.com')]




                                                        III Encontro do PUG-PE
Exemplos práticos
    str = 'purple alice@google.com, blah monkey bob@abc.com blah dishwasher'
    tuples = re.findall(r'([w.-]+)@([w.-]+)', str)
    print tuples  ## [('alice', 'google.com'), ('bob', 'abc.com')]
    for tuple in tuples:
      print tuple[0]  ## username
      print tuple[1]  ## host




(?: ) Grupo de captura o qual não quer que entre nos
                     resultados.


                                                       III Encontro do PUG-PE
Dicas para criação de ER


Tente criar expressões regulares simples que tragam
                   mais resultados.
 A idéia é ir aos poucos refinando até chegar onde
                     você quer.
         Enfraquecido no início, forte no fim.


                                    III Encontro do PUG-PE
Parâmetros opcinais para RE

Flags opcionais para funções como re.search, findall(), etc.
         ex: re.search(patt, str, re.IGNORECASE)

   IGNORECASE Ignore o case sensitive. Identifica ambos ‘a’ e ‘A’
     DOTALL      Permite (.) para casa quebra de linhas. Por padrão .* só casa
                  encontrar uma quebra de linha (n).
    MULTILINE Permite strings de múltiplas linhas. Permite ^e $ para casar o
                 ínicio ou fim de cada linha.




                                                        III Encontro do PUG-PE
re -Substituição

        re.sub(pat,replacement,str)


re.sub() - Busca por todas as instâncias do padrão
    em um texto e os substitui por outro padrão.




                                   III Encontro do PUG-PE
Exemplos práticos

        Não entendeu?! Vamos a um exemplo!

'purple alice@google.com, blah monkey bob@abc.com blah dishwasher'




  Vamos trocar todos os domínios do e-mail por
                yo-yo-dyne.com



                                               III Encontro do PUG-PE
Exemplos práticos

   re.sub(r'([w.-]+)@([w.-]+)', r'1@yo-yo-dyne.com', str)




Entrada:   'purple alice@google.com, blah monkey bob@abc.com blah dishwasher'




Saída:   ‘purple alice@yo-yo-dyne.com, blah monkey bob@yo-yo-dyne.com blah dishwasher’




                                                           III Encontro do PUG-PE
Exemplos práticos
   str = 'purple alice@google.com, blah monkey bob@abc.com blah dishwasher'
   ## re.sub(pat, replacement, str) -- returns new string with all replacements,
   ## 1 is group(1), 2 group(2) in the replacement
  
   print re.sub(r'([w.-]+)@([w.-]+)', r'1@yo-yo-dyne.com', str)
   ## purple alice@yo-yo-dyne.com, blah monkey bob@yo-yo-dyne.com blah dishwasher




O padrão a substuir pode incluir 1 2 que se refere
no texto ao group(1), group(2), etc.. do texto original.

                                                         III Encontro do PUG-PE
Greedy x Non-Greedy


        Vamos considerar o seguinte texto:

  ‘<b>foo</b> and <i>so on </i>’
E queremos pegar apenas os padrões que atendem
      ‘(<.*>)’ , qual é o resultado esperado ?


                                   III Encontro do PUG-PE
Greedy x Non-Greedy


           Retorna:

‘<b>foo</b> and <i>so on </i>’

          Como assim ?!


                          III Encontro do PUG-PE
Greedy x Non-Greedy

*. é um operador guloso (‘greedy’), vai o máximo que
                       pode!


              Soluções: .*? ou .+?




                                     III Encontro do PUG-PE
Greedy x Non-Greedy

 ‘(<.*?>)’ irá só pegar ‘<b>’ como primeiro grupo e
<‘/b> como segundo grupo, e assim sucessivamente.


  .*? Irá consumir até encontrar um marcador
procedente de ? (> neste caso) que força a parada
                      de .*?

                                     III Encontro do PUG-PE
Ferramenta para testes de RE
         Python Regex
   http://www.pythonregex.com/




                          III Encontro do PUG-PE
“”.join(re.findall(r'([A-Za-zs!]+)',
'V123a345le?&#u34 2423p#46e,ss443839o-3939a34949l42 !'))




           twitter: marcelcaraciolo
        blog: http://www.mobideia.com
         http://aimotion.blogspot.com
              caraciol@gmail.com


                                                   III Encontro do PUG-PE
Referências


          http://pt.wikipedia.org/wiki/Express%C3%A3o_regular


http://code.google.com/edu/languages/google-python-class/regular-expressions.html


                    http://docs.python.org/library/re.html




                                                             III Encontro do PUG-PE
Expressões Regulares:
Um canivete suíço para processamento de textos


           III Encontro do PUG-PE
               Marcel Caraciolo


                                    III Encontro do PUG-PE

Más contenido relacionado

La actualidad más candente

Perl Moderno, dia1
Perl Moderno, dia1Perl Moderno, dia1
Perl Moderno, dia1garux
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Elaine Cecília Gatto
 
Expressões Regulares - Introdução
Expressões Regulares - IntroduçãoExpressões Regulares - Introdução
Expressões Regulares - IntroduçãoJackson Veroneze
 
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUACândido Sales Gomes
 
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarHaskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarCRISLANIO MACEDO
 
Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Elaine Cecília Gatto
 
Expressões Regulares - Parte II
Expressões Regulares - Parte IIExpressões Regulares - Parte II
Expressões Regulares - Parte IIJackson Veroneze
 
Haskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classesHaskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classesCRISLANIO MACEDO
 
Pesquisa tipos de entrada de dados php
Pesquisa tipos de entrada de dados phpPesquisa tipos de entrada de dados php
Pesquisa tipos de entrada de dados phpWesley Germano Otávio
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04thomasdacosta
 
De bem com as expressões regulares
De bem com as expressões regularesDe bem com as expressões regulares
De bem com as expressões regularesFlávio Silveira
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonDiogo Gomes
 
PHP Arrays - Básico | Certificação
PHP Arrays - Básico | CertificaçãoPHP Arrays - Básico | Certificação
PHP Arrays - Básico | CertificaçãoRicardo de Carvalho
 
Palestra python
Palestra pythonPalestra python
Palestra pythonRony Cruch
 

La actualidad más candente (20)

Perl Moderno, dia1
Perl Moderno, dia1Perl Moderno, dia1
Perl Moderno, dia1
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3
 
Expressões Regulares - Introdução
Expressões Regulares - IntroduçãoExpressões Regulares - Introdução
Expressões Regulares - Introdução
 
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
 
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarHaskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
 
Regex
RegexRegex
Regex
 
Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1
 
Haskell aula3 listas
Haskell aula3 listasHaskell aula3 listas
Haskell aula3 listas
 
Expressões Regulares - Parte II
Expressões Regulares - Parte IIExpressões Regulares - Parte II
Expressões Regulares - Parte II
 
Standard ML / CPN ML
Standard ML / CPN MLStandard ML / CPN ML
Standard ML / CPN ML
 
Haskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classesHaskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classes
 
Aula 01 - Curso PHP e MySQL
Aula 01 - Curso PHP e MySQLAula 01 - Curso PHP e MySQL
Aula 01 - Curso PHP e MySQL
 
Atribuições
AtribuiçõesAtribuições
Atribuições
 
Pesquisa tipos de entrada de dados php
Pesquisa tipos de entrada de dados phpPesquisa tipos de entrada de dados php
Pesquisa tipos de entrada de dados php
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04
 
Aula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQLAula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQL
 
De bem com as expressões regulares
De bem com as expressões regularesDe bem com as expressões regulares
De bem com as expressões regulares
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
 
PHP Arrays - Básico | Certificação
PHP Arrays - Básico | CertificaçãoPHP Arrays - Básico | Certificação
PHP Arrays - Básico | Certificação
 
Palestra python
Palestra pythonPalestra python
Palestra python
 

Destacado

Regular expressions in Python
Regular expressions in PythonRegular expressions in Python
Regular expressions in PythonSujith Kumar
 
Manual Simples Expressões Regulares Python
Manual Simples Expressões Regulares PythonManual Simples Expressões Regulares Python
Manual Simples Expressões Regulares PythonBismarck Gomes
 
Como interpretar seu próprio genoma com Python
Como interpretar seu próprio genoma com PythonComo interpretar seu próprio genoma com Python
Como interpretar seu próprio genoma com PythonMarcel Caraciolo
 
Matteo baccan raspberry pi - linox 2014
Matteo baccan   raspberry pi - linox 2014Matteo baccan   raspberry pi - linox 2014
Matteo baccan raspberry pi - linox 2014Matteo Baccan
 
Social Media Advice for SHRM chapters
Social Media Advice for SHRM chaptersSocial Media Advice for SHRM chapters
Social Media Advice for SHRM chaptersMichael VanDervort
 
Drets d'examen
Drets d'examenDrets d'examen
Drets d'examenajec
 
You Media: Relationships and The Long Tail of Popularity
You Media: Relationships and The Long Tail of PopularityYou Media: Relationships and The Long Tail of Popularity
You Media: Relationships and The Long Tail of PopularityMrinal Desai
 
Social Media In An Eh World
Social Media In An Eh WorldSocial Media In An Eh World
Social Media In An Eh WorldSteve Lipton
 
Niver Je - 26.10.07
Niver Je - 26.10.07Niver Je - 26.10.07
Niver Je - 26.10.07Jubrac Jacui
 
Learning Pool's Sam Barbee on 'E-learning to train social workers'
Learning Pool's Sam Barbee on 'E-learning to train social workers'Learning Pool's Sam Barbee on 'E-learning to train social workers'
Learning Pool's Sam Barbee on 'E-learning to train social workers'Paul McElvaney
 
Pondres Social Marketing Event preso's
Pondres Social Marketing Event preso'sPondres Social Marketing Event preso's
Pondres Social Marketing Event preso'sSjef Kerkhofs
 
Webtech 2010: twitter programming
Webtech 2010: twitter programmingWebtech 2010: twitter programming
Webtech 2010: twitter programmingMatteo Baccan
 
Tipos de texto
Tipos de textoTipos de texto
Tipos de textocubs2000
 
נוכחות אונליין - המכללה לעסקים קטנים, המכללה למנהל
נוכחות אונליין - המכללה לעסקים קטנים, המכללה למנהל    נוכחות אונליין - המכללה לעסקים קטנים, המכללה למנהל
נוכחות אונליין - המכללה לעסקים קטנים, המכללה למנהל Udi Salant
 
Learning Pool's Public Sector Learning Conference 2010
Learning Pool's Public Sector Learning Conference 2010Learning Pool's Public Sector Learning Conference 2010
Learning Pool's Public Sector Learning Conference 2010Paul McElvaney
 
Slide Share Mw
Slide Share MwSlide Share Mw
Slide Share MwLutie
 
香港六合彩
香港六合彩香港六合彩
香港六合彩wejia
 

Destacado (20)

Regular expressions in Python
Regular expressions in PythonRegular expressions in Python
Regular expressions in Python
 
Manual Simples Expressões Regulares Python
Manual Simples Expressões Regulares PythonManual Simples Expressões Regulares Python
Manual Simples Expressões Regulares Python
 
Como interpretar seu próprio genoma com Python
Como interpretar seu próprio genoma com PythonComo interpretar seu próprio genoma com Python
Como interpretar seu próprio genoma com Python
 
Matteo baccan raspberry pi - linox 2014
Matteo baccan   raspberry pi - linox 2014Matteo baccan   raspberry pi - linox 2014
Matteo baccan raspberry pi - linox 2014
 
Social Media Advice for SHRM chapters
Social Media Advice for SHRM chaptersSocial Media Advice for SHRM chapters
Social Media Advice for SHRM chapters
 
Drets d'examen
Drets d'examenDrets d'examen
Drets d'examen
 
You Media: Relationships and The Long Tail of Popularity
You Media: Relationships and The Long Tail of PopularityYou Media: Relationships and The Long Tail of Popularity
You Media: Relationships and The Long Tail of Popularity
 
Social Media In An Eh World
Social Media In An Eh WorldSocial Media In An Eh World
Social Media In An Eh World
 
Niver Je - 26.10.07
Niver Je - 26.10.07Niver Je - 26.10.07
Niver Je - 26.10.07
 
Learning Pool's Sam Barbee on 'E-learning to train social workers'
Learning Pool's Sam Barbee on 'E-learning to train social workers'Learning Pool's Sam Barbee on 'E-learning to train social workers'
Learning Pool's Sam Barbee on 'E-learning to train social workers'
 
Ana Virtual Worlds
Ana Virtual WorldsAna Virtual Worlds
Ana Virtual Worlds
 
Pondres Social Marketing Event preso's
Pondres Social Marketing Event preso'sPondres Social Marketing Event preso's
Pondres Social Marketing Event preso's
 
Webtech 2010: twitter programming
Webtech 2010: twitter programmingWebtech 2010: twitter programming
Webtech 2010: twitter programming
 
Tipos de texto
Tipos de textoTipos de texto
Tipos de texto
 
Scmad Chapter15
Scmad Chapter15Scmad Chapter15
Scmad Chapter15
 
נוכחות אונליין - המכללה לעסקים קטנים, המכללה למנהל
נוכחות אונליין - המכללה לעסקים קטנים, המכללה למנהל    נוכחות אונליין - המכללה לעסקים קטנים, המכללה למנהל
נוכחות אונליין - המכללה לעסקים קטנים, המכללה למנהל
 
Learning Pool's Public Sector Learning Conference 2010
Learning Pool's Public Sector Learning Conference 2010Learning Pool's Public Sector Learning Conference 2010
Learning Pool's Public Sector Learning Conference 2010
 
Slide Share Mw
Slide Share MwSlide Share Mw
Slide Share Mw
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
111219 outsourcing
111219 outsourcing111219 outsourcing
111219 outsourcing
 

Similar a Expressões Regulares: Um guia prático para Python

04 - C# laços de repetição, vetores e matrizes v1.0
04 - C# laços de repetição, vetores e matrizes v1.004 - C# laços de repetição, vetores e matrizes v1.0
04 - C# laços de repetição, vetores e matrizes v1.0César Augusto Pessôa
 
Matemática - Progressão Aritmética - www.CentroApoio.com - Vídeo Aula
Matemática - Progressão Aritmética  - www.CentroApoio.com - Vídeo AulaMatemática - Progressão Aritmética  - www.CentroApoio.com - Vídeo Aula
Matemática - Progressão Aritmética - www.CentroApoio.com - Vídeo AulaVídeo Aulas Apoio
 
Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)Danilo Pinotti
 

Similar a Expressões Regulares: Um guia prático para Python (9)

Python 02
Python 02Python 02
Python 02
 
Python Class
Python ClassPython Class
Python Class
 
PHP Básico - Parte 3
PHP Básico - Parte 3PHP Básico - Parte 3
PHP Básico - Parte 3
 
Regex
RegexRegex
Regex
 
Apostila rpira
Apostila rpiraApostila rpira
Apostila rpira
 
04 - C# laços de repetição, vetores e matrizes v1.0
04 - C# laços de repetição, vetores e matrizes v1.004 - C# laços de repetição, vetores e matrizes v1.0
04 - C# laços de repetição, vetores e matrizes v1.0
 
Matemática - Progressão Aritmética - www.CentroApoio.com - Vídeo Aula
Matemática - Progressão Aritmética  - www.CentroApoio.com - Vídeo AulaMatemática - Progressão Aritmética  - www.CentroApoio.com - Vídeo Aula
Matemática - Progressão Aritmética - www.CentroApoio.com - Vídeo Aula
 
Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)
 
Aquece Para a prova de EDA3
Aquece Para a prova de EDA3Aquece Para a prova de EDA3
Aquece Para a prova de EDA3
 

Más de Marcel Caraciolo

Joblib: Lightweight pipelining for parallel jobs (v2)
Joblib:  Lightweight pipelining for parallel jobs (v2)Joblib:  Lightweight pipelining for parallel jobs (v2)
Joblib: Lightweight pipelining for parallel jobs (v2)Marcel Caraciolo
 
Construindo softwares de bioinformática para análises clínicas : Desafios e...
Construindo softwares  de bioinformática  para análises clínicas : Desafios e...Construindo softwares  de bioinformática  para análises clínicas : Desafios e...
Construindo softwares de bioinformática para análises clínicas : Desafios e...Marcel Caraciolo
 
Como Python ajudou a automatizar o nosso laboratório v.2
Como Python ajudou a automatizar o nosso laboratório v.2Como Python ajudou a automatizar o nosso laboratório v.2
Como Python ajudou a automatizar o nosso laboratório v.2Marcel Caraciolo
 
Como Python pode ajudar na automação do seu laboratório
Como Python pode ajudar na automação do  seu laboratórioComo Python pode ajudar na automação do  seu laboratório
Como Python pode ajudar na automação do seu laboratórioMarcel Caraciolo
 
Python on Science ? Yes, We can.
Python on Science ?   Yes, We can.Python on Science ?   Yes, We can.
Python on Science ? Yes, We can.Marcel Caraciolo
 
Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3Marcel Caraciolo
 
Recommender Systems with Ruby (adding machine learning, statistics, etc)
Recommender Systems with Ruby (adding machine learning, statistics, etc)Recommender Systems with Ruby (adding machine learning, statistics, etc)
Recommender Systems with Ruby (adding machine learning, statistics, etc)Marcel Caraciolo
 
Opensource - Como começar e dá dinheiro ?
Opensource - Como começar e dá dinheiro ?Opensource - Como começar e dá dinheiro ?
Opensource - Como começar e dá dinheiro ?Marcel Caraciolo
 
Benchy, python framework for performance benchmarking of Python Scripts
Benchy, python framework for performance benchmarking  of Python ScriptsBenchy, python framework for performance benchmarking  of Python Scripts
Benchy, python framework for performance benchmarking of Python ScriptsMarcel Caraciolo
 
Python e 10 motivos por que devo conhece-la ?
Python e 10 motivos por que devo conhece-la ?Python e 10 motivos por que devo conhece-la ?
Python e 10 motivos por que devo conhece-la ?Marcel Caraciolo
 
GeoMapper, Python Script for Visualizing Data on Social Networks with Geo-loc...
GeoMapper, Python Script for Visualizing Data on Social Networks with Geo-loc...GeoMapper, Python Script for Visualizing Data on Social Networks with Geo-loc...
GeoMapper, Python Script for Visualizing Data on Social Networks with Geo-loc...Marcel Caraciolo
 
Benchy: Lightweight framework for Performance Benchmarks
Benchy: Lightweight framework for Performance Benchmarks Benchy: Lightweight framework for Performance Benchmarks
Benchy: Lightweight framework for Performance Benchmarks Marcel Caraciolo
 
Construindo Sistemas de Recomendação com Python
Construindo Sistemas de Recomendação com PythonConstruindo Sistemas de Recomendação com Python
Construindo Sistemas de Recomendação com PythonMarcel Caraciolo
 
Python, A pílula Azul da programação
Python, A pílula Azul da programaçãoPython, A pílula Azul da programação
Python, A pílula Azul da programaçãoMarcel Caraciolo
 
Construindo Soluções Científicas com Big Data & MapReduce
Construindo Soluções Científicas com Big Data & MapReduceConstruindo Soluções Científicas com Big Data & MapReduce
Construindo Soluções Científicas com Big Data & MapReduceMarcel Caraciolo
 
Como Python está mudando a forma de aprendizagem à distância no Brasil
Como Python está mudando a forma de aprendizagem à distância no BrasilComo Python está mudando a forma de aprendizagem à distância no Brasil
Como Python está mudando a forma de aprendizagem à distância no BrasilMarcel Caraciolo
 
Novas Tendências para a Educação a Distância: Como reinventar a educação ?
Novas Tendências para a Educação a Distância: Como reinventar a educação ?Novas Tendências para a Educação a Distância: Como reinventar a educação ?
Novas Tendências para a Educação a Distância: Como reinventar a educação ?Marcel Caraciolo
 
Aula WebCrawlers com Regex - PyCursos
Aula WebCrawlers com Regex - PyCursosAula WebCrawlers com Regex - PyCursos
Aula WebCrawlers com Regex - PyCursosMarcel Caraciolo
 
Arquivos Zip com Python - Aula PyCursos
Arquivos Zip com Python - Aula PyCursosArquivos Zip com Python - Aula PyCursos
Arquivos Zip com Python - Aula PyCursosMarcel Caraciolo
 

Más de Marcel Caraciolo (20)

Joblib: Lightweight pipelining for parallel jobs (v2)
Joblib:  Lightweight pipelining for parallel jobs (v2)Joblib:  Lightweight pipelining for parallel jobs (v2)
Joblib: Lightweight pipelining for parallel jobs (v2)
 
Construindo softwares de bioinformática para análises clínicas : Desafios e...
Construindo softwares  de bioinformática  para análises clínicas : Desafios e...Construindo softwares  de bioinformática  para análises clínicas : Desafios e...
Construindo softwares de bioinformática para análises clínicas : Desafios e...
 
Como Python ajudou a automatizar o nosso laboratório v.2
Como Python ajudou a automatizar o nosso laboratório v.2Como Python ajudou a automatizar o nosso laboratório v.2
Como Python ajudou a automatizar o nosso laboratório v.2
 
Como Python pode ajudar na automação do seu laboratório
Como Python pode ajudar na automação do  seu laboratórioComo Python pode ajudar na automação do  seu laboratório
Como Python pode ajudar na automação do seu laboratório
 
Python on Science ? Yes, We can.
Python on Science ?   Yes, We can.Python on Science ?   Yes, We can.
Python on Science ? Yes, We can.
 
Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3
 
Recommender Systems with Ruby (adding machine learning, statistics, etc)
Recommender Systems with Ruby (adding machine learning, statistics, etc)Recommender Systems with Ruby (adding machine learning, statistics, etc)
Recommender Systems with Ruby (adding machine learning, statistics, etc)
 
Opensource - Como começar e dá dinheiro ?
Opensource - Como começar e dá dinheiro ?Opensource - Como começar e dá dinheiro ?
Opensource - Como começar e dá dinheiro ?
 
Big Data com Python
Big Data com PythonBig Data com Python
Big Data com Python
 
Benchy, python framework for performance benchmarking of Python Scripts
Benchy, python framework for performance benchmarking  of Python ScriptsBenchy, python framework for performance benchmarking  of Python Scripts
Benchy, python framework for performance benchmarking of Python Scripts
 
Python e 10 motivos por que devo conhece-la ?
Python e 10 motivos por que devo conhece-la ?Python e 10 motivos por que devo conhece-la ?
Python e 10 motivos por que devo conhece-la ?
 
GeoMapper, Python Script for Visualizing Data on Social Networks with Geo-loc...
GeoMapper, Python Script for Visualizing Data on Social Networks with Geo-loc...GeoMapper, Python Script for Visualizing Data on Social Networks with Geo-loc...
GeoMapper, Python Script for Visualizing Data on Social Networks with Geo-loc...
 
Benchy: Lightweight framework for Performance Benchmarks
Benchy: Lightweight framework for Performance Benchmarks Benchy: Lightweight framework for Performance Benchmarks
Benchy: Lightweight framework for Performance Benchmarks
 
Construindo Sistemas de Recomendação com Python
Construindo Sistemas de Recomendação com PythonConstruindo Sistemas de Recomendação com Python
Construindo Sistemas de Recomendação com Python
 
Python, A pílula Azul da programação
Python, A pílula Azul da programaçãoPython, A pílula Azul da programação
Python, A pílula Azul da programação
 
Construindo Soluções Científicas com Big Data & MapReduce
Construindo Soluções Científicas com Big Data & MapReduceConstruindo Soluções Científicas com Big Data & MapReduce
Construindo Soluções Científicas com Big Data & MapReduce
 
Como Python está mudando a forma de aprendizagem à distância no Brasil
Como Python está mudando a forma de aprendizagem à distância no BrasilComo Python está mudando a forma de aprendizagem à distância no Brasil
Como Python está mudando a forma de aprendizagem à distância no Brasil
 
Novas Tendências para a Educação a Distância: Como reinventar a educação ?
Novas Tendências para a Educação a Distância: Como reinventar a educação ?Novas Tendências para a Educação a Distância: Como reinventar a educação ?
Novas Tendências para a Educação a Distância: Como reinventar a educação ?
 
Aula WebCrawlers com Regex - PyCursos
Aula WebCrawlers com Regex - PyCursosAula WebCrawlers com Regex - PyCursos
Aula WebCrawlers com Regex - PyCursos
 
Arquivos Zip com Python - Aula PyCursos
Arquivos Zip com Python - Aula PyCursosArquivos Zip com Python - Aula PyCursos
Arquivos Zip com Python - Aula PyCursos
 

Expressões Regulares: Um guia prático para Python

  • 1. Expressões Regulares: Um canivete suíço para processamento de textos III Encontro do PUG-PE Marcel Caraciolo III Encontro do PUG-PE
  • 2. O que são Expressões Regulares ? Também chamado de regex ou regexp Ferramenta eficiente para processamento de palavras em texto por meio de casamento padrões. Linguagem formal que pode ser interpretada por um processador de expressões regulares ou por um programa que identifica partes do texto que “casam”com uma especificação provida. - Wikipedia III Encontro do PUG-PE
  • 3. O que são Expressões Regulares ? (Exemplos) Sequência de caracteres ‘car’ em qualquer conteto, como em “car”, “cartoon”, “bicarbonate” A palavra “car” quando aparece isoladamente A palavra “car” quando precedida de “blue” or “red” Símbolo $ seguido por 1 ou mais dígitos, e após, opcionalmente, um . seguido por mais 2 dígitos. III Encontro do PUG-PE
  • 4. Mas antes um pouco de História... Estão na teoria dos automâtos e linguagens formais Descrição e classificação de linguagens formais Na década de 50, Stephen Kleene criou sua notação (conjuntos regulares) formando a algébra de Kleene Realmente usáveis a partir da biblioteca escrita para tcl e Perl, definindo a PCRE. III Encontro do PUG-PE
  • 5. Python e Expressões Regulares O módulo re é o responsável! Mas por onde começamos ?! III Encontro do PUG-PE
  • 6. re - Elementos básicos a,X, 9 caracteres normais, casam com eles mesmos exatamente . casam com qualquer caractere exceto n w casam com qualquer letra ou dígito ou _ [a-zA-Z0-9_]. Apenas 1 caractere!!! W casam com qualquer não caractere (o complemento de w) b casa a separação de palavras. s casa com o caractere espaço em branco, quebra de linha, tab, form [ nrtf]. S casa com qualquer não caractere acima [ complemento de s] t n r - tab newline e return d digitos [0-9] ^ início ou $ fim - casam com o início ou fim da string Inibe os caracteres especiais acima. Ex: . (casa com um ponto) , (casa com uma ). III Encontro do PUG-PE
  • 7. re - Alguns comandos básicos match = re.search(pat, str) re.search() - Recebe uma expressão regular e uma string. Procura por padrões que satisfazem a especificação dada. III Encontro do PUG-PE
  • 8. re - Alguns comandos básicos str = 'an example word:cat!!' match = re.search(r'word:www', str) # O if testa se o search obteve sucesso.   if match:                           print 'found', match.group() ## 'achou word:cat'   else:     print 'did not find' Retorna None se a busca foi falha. Senão retorna um objeto match III Encontro do PUG-PE
  • 9. search - Algumas regras básicas A busca varre sobre a string do ínicio ao fim, interrompendo no primeiro match encontrado. Todo o padrão tem que ser satisfeito e não toda string. match.group() retorna o texto identificado. III Encontro do PUG-PE
  • 10. re - Alguns comandos básicos   ## Search for pattern 'iii' in string 'piiig'.   ## All of the pattern must match, but it may appear anywhere.   ## On success, match.group() is matched text.   match = re.search(r'iii', 'piiig') =>  found, match.group() == "iii"   match = re.search(r'igs', 'piiig') =>  not found, match == None   ## . = any char but n   match = re.search(r'..g', 'piiig') =>  found, match.group() == "iig"   ## d = digit char, w = word char   match = re.search(r'ddd', 'p123g') =>  found, match.group() == "123"   match = re.search(r'www', '@@abcd!!') =>  found, match.group() == "abc" Retorna None se a busca foi falha. Senão retorna um objeto match III Encontro do PUG-PE
  • 11. re - Repetição + Uma ou mais ocorrências do elemento precedente ex: i+ (1 ou mais ‘i’s) * 0 ou mais ocorrências do elemento precedente ? Casa 0 ou 1 ocorência do elemento precedente III Encontro do PUG-PE
  • 12. re - Repetição São operadores Greedy e LeftMost Tentam achar o padrão mais à esquerda e tentam consumir a string o máximo possível. III Encontro do PUG-PE
  • 13. re - Repetição ## i+ = one or more i's, as many as possible.   match = re.search(r'pi+', 'piiig') =>  found, match.group() == "piii"   ## Finds the first/leftmost solution, and within it drives the +   ## as far as possible (aka 'leftmost and largest').   ## In this example, note that it does not get to the second set of i's.   match = re.search(r'i+', 'piigiiii') =>  found, match.group() == "ii"   ## s* = zero or more whitespace chars   ## Here look for 3 digits, possibly separated by whitespace.   match = re.search(r'ds*ds*d', 'xx1 2   3xx') =>  found, match.group() == "1 2   3"   match = re.search(r'ds*ds*d', 'xx12  3xx') =>  found, match.group() == "12  3"   match = re.search(r'ds*ds*d', 'xx123xx') =>  found, match.group() == "123"   ## ^ = matches the start of string, so this fails:   match = re.search(r'^bw+', 'foobar') =>  not found, match == None   ## but without the ^ it succeeds:   match = re.search(r'bw+', 'foobar') =>  found, match.group() == "bar" III Encontro do PUG-PE
  • 14. re - Alguns comandos básicos pattern = re.compile(pat) pattern.match(str) re.compile() - Permite compilar a expressão regular e retorna um objeto SRE_Pattern re.match() - retorna None se a string não atender as especificações e ao contrário um objeto Match. III Encontro do PUG-PE
  • 15. Exemplos práticos Temos o texto a seguir: 'xyz alice-b@google.com purple monkey' Como extrairmos o e-mail deste e-mail ?! III Encontro do PUG-PE
  • 16. Exemplos práticos Tentativa 01 r'w+@w+': Entrada: 'xyz alice-b@google.com purple monkey' Saída: b@google III Encontro do PUG-PE
  • 17. Exemplos práticos   str = 'purple alice-b@google.com purple monkey'   match = re.search(r'w+@w+', str)   if match:     print match.group()  ## 'b@google' Problema! w não captura . ou - III Encontro do PUG-PE
  • 18. Antes.. [ ] - Lista de caracteres. Casa uma ocorrência de qualquer caractere na lista. [abc] casa ‘a’, ‘b’ou ‘c’. Define Intervalos de caracteres ex: [a-z] ou [0-9] Caracteres Caracteres especiais como - ou . são considerados literais dentro da lista. III Encontro do PUG-PE
  • 19. Exemplos práticos Tentativa 02 r'[w.-]+@[w.-]+' Entrada: 'xyz alice-b@google.com purple monkey' Saída: alice-b@google.com III Encontro do PUG-PE
  • 20. Exemplos práticos   match = re.search(r'[w.-]+@[w.-]+', str)   if match:     print match.group()  ## 'alice-b@google.com' PS: [ˆ ] Lista negada de caracteres. Casa uma ocorrência de qualquer caractere nõ contido na lista. [^abc] - qualquer caractere exceto ‘a’ou ‘b’ ou ‘c III Encontro do PUG-PE
  • 21. Exemplos práticos Show! Mas agora eu quero pegar partes específicas do e-mail, e agora?! 'xyz alice-b@google.com purple monkey' login e domínio III Encontro do PUG-PE
  • 22. O group() irá nos ajudar! match.group(int) - Permite capturar partes específicas do texto (subexpressões). ( ) - Delimita grupos de captura dentro do padrão a ser extraído. III Encontro do PUG-PE
  • 23. Exemplos práticos r'([w.-]+)@([w.-]+)' Entrada: 'xyz alice-b@google.com purple monkey' alice-b@google.com #match.group() Saída: alice-b #match.group(1) google.com #match.group(2) III Encontro do PUG-PE
  • 24. Exemplos práticos   str = 'purple alice-b@google.com monkey dishwasher'   match = re.search('([w.-]+)@([w.-]+)', str)   if match:     print match.group()   ## 'alice-b@google.com' (the whole match)     print match.group(1)  ## 'alice-b' (the username, group 1)     print match.group(2)  ## 'google.com' (the host, group 2) Ferramenta útil para extração de cadeias de caracteres específicas do padrão. III Encontro do PUG-PE
  • 25. re - Comandos básicos re.findall(patt,str) re.findall() - Retorna todas as strings que casam com a especificação desejada. Retorna uma lista de strings, onde cada string representa um padrão encontrado. III Encontro do PUG-PE
  • 26. Exemplos práticos   ## Suppose we have a text with many email addresses   str = 'purple alice@google.com, blah monkey bob@abc.com blah dishwasher'   ## Here re.findall() returns a list of all the found email strings   emails = re.findall(r'[w.-]+@[w.-]+', str) ## ['alice@google.com', 'bob@abc.com']   for email in emails:     # do something with each found email string     print email III Encontro do PUG-PE
  • 27. Exemplos práticos E se minha string fosse um arquivo-texto?! re.findall() continua sendo uma ótima solução!   # Open file   f = open('test.txt', 'r')   # Feed the file text into findall(); #it returns a list of all the found strings   strings = re.findall(r'some pattern', f.read()) III Encontro do PUG-PE
  • 28. findall() e group() juntos! Grupos de Captura ( ) combinado findall() Retorna uma lista de tuplas. Cada tupla representando um padrão encontrado, onde cada elemento representa group(1), group(2), ... III Encontro do PUG-PE
  • 29. Exemplos práticos Voltando para o nosso exemplo do e-mail 'purple alice@google.com, blah monkey bob@abc.com blah dishwasher' Se quisermos partes específicas dos padrões?! Vamos montar nossa expressão regular! III Encontro do PUG-PE
  • 30. Exemplos práticos Tentativa 02 r'([w.-])+@([w.-]+)' Entrada: 'purple alice@google.com, blah monkey bob@abc.com blah dishwasher' Saída: [('alice', 'google.com'), ('bob', 'abc.com')] III Encontro do PUG-PE
  • 31. Exemplos práticos   str = 'purple alice@google.com, blah monkey bob@abc.com blah dishwasher'   tuples = re.findall(r'([w.-]+)@([w.-]+)', str)   print tuples  ## [('alice', 'google.com'), ('bob', 'abc.com')]   for tuple in tuples:     print tuple[0]  ## username     print tuple[1]  ## host (?: ) Grupo de captura o qual não quer que entre nos resultados. III Encontro do PUG-PE
  • 32. Dicas para criação de ER Tente criar expressões regulares simples que tragam mais resultados. A idéia é ir aos poucos refinando até chegar onde você quer. Enfraquecido no início, forte no fim. III Encontro do PUG-PE
  • 33. Parâmetros opcinais para RE Flags opcionais para funções como re.search, findall(), etc. ex: re.search(patt, str, re.IGNORECASE) IGNORECASE Ignore o case sensitive. Identifica ambos ‘a’ e ‘A’ DOTALL Permite (.) para casa quebra de linhas. Por padrão .* só casa encontrar uma quebra de linha (n). MULTILINE Permite strings de múltiplas linhas. Permite ^e $ para casar o ínicio ou fim de cada linha. III Encontro do PUG-PE
  • 34. re -Substituição re.sub(pat,replacement,str) re.sub() - Busca por todas as instâncias do padrão em um texto e os substitui por outro padrão. III Encontro do PUG-PE
  • 35. Exemplos práticos Não entendeu?! Vamos a um exemplo! 'purple alice@google.com, blah monkey bob@abc.com blah dishwasher' Vamos trocar todos os domínios do e-mail por yo-yo-dyne.com III Encontro do PUG-PE
  • 36. Exemplos práticos re.sub(r'([w.-]+)@([w.-]+)', r'1@yo-yo-dyne.com', str) Entrada: 'purple alice@google.com, blah monkey bob@abc.com blah dishwasher' Saída: ‘purple alice@yo-yo-dyne.com, blah monkey bob@yo-yo-dyne.com blah dishwasher’ III Encontro do PUG-PE
  • 37. Exemplos práticos   str = 'purple alice@google.com, blah monkey bob@abc.com blah dishwasher'   ## re.sub(pat, replacement, str) -- returns new string with all replacements,   ## 1 is group(1), 2 group(2) in the replacement   print re.sub(r'([w.-]+)@([w.-]+)', r'1@yo-yo-dyne.com', str)   ## purple alice@yo-yo-dyne.com, blah monkey bob@yo-yo-dyne.com blah dishwasher O padrão a substuir pode incluir 1 2 que se refere no texto ao group(1), group(2), etc.. do texto original. III Encontro do PUG-PE
  • 38. Greedy x Non-Greedy Vamos considerar o seguinte texto: ‘<b>foo</b> and <i>so on </i>’ E queremos pegar apenas os padrões que atendem ‘(<.*>)’ , qual é o resultado esperado ? III Encontro do PUG-PE
  • 39. Greedy x Non-Greedy Retorna: ‘<b>foo</b> and <i>so on </i>’ Como assim ?! III Encontro do PUG-PE
  • 40. Greedy x Non-Greedy *. é um operador guloso (‘greedy’), vai o máximo que pode! Soluções: .*? ou .+? III Encontro do PUG-PE
  • 41. Greedy x Non-Greedy ‘(<.*?>)’ irá só pegar ‘<b>’ como primeiro grupo e <‘/b> como segundo grupo, e assim sucessivamente. .*? Irá consumir até encontrar um marcador procedente de ? (> neste caso) que força a parada de .*? III Encontro do PUG-PE
  • 42. Ferramenta para testes de RE Python Regex http://www.pythonregex.com/ III Encontro do PUG-PE
  • 43. “”.join(re.findall(r'([A-Za-zs!]+)', 'V123a345le?&#u34 2423p#46e,ss443839o-3939a34949l42 !')) twitter: marcelcaraciolo blog: http://www.mobideia.com http://aimotion.blogspot.com caraciol@gmail.com III Encontro do PUG-PE
  • 44. Referências http://pt.wikipedia.org/wiki/Express%C3%A3o_regular http://code.google.com/edu/languages/google-python-class/regular-expressions.html http://docs.python.org/library/re.html III Encontro do PUG-PE
  • 45. Expressões Regulares: Um canivete suíço para processamento de textos III Encontro do PUG-PE Marcel Caraciolo III Encontro do PUG-PE

Notas del editor