Tutorial de Expressões Regulares, parte 3: O caractere pipe | (OU em Regex)

Dando sequência aos nossos estudos de Regex em Python, vamos estudar o caractere pipe: |
Ele é o símbolo de OU, em expressões regulares.

Certificado do curso (para trabalhar como programador profissional)

Caractere Pipe: |

Existe um caractere especial no mundo das regex, é a barra vertical: |
Ela é chamada de pipe e tem um significado de OU: ou isso ou aquilo.

Usamos elas em expressões regulares, quando queremos encontrar um padrão OU outro, ou seja, qualquer um ou mesmo os dois.

Exemplo de uso:
r'padrao1 | padrao2 | padrao3'

Essa expressão regular vai em busca de qualquer um dos três padrões.
Por exemplo, script abaixo detecta se o alguma das bandas favoritas do usuário é Iron Maiden, Rush ou Deep Purple:

import re

while True:
 texto = input("Quais suas bandas favoritas: " )

 minhaRegex = re.findall(r'Rush|Iron Maiden|Deep Purple', texto)
 print("Gostei dessas: ", minhaRegex)

Não digite nenhuma banda de forró, funk ou k-pop, o programa vai travar e vai queimar seu HD. E sua casa vai pegar fogo também.

Exercício de Regex Usando Pipe |

No artigo passado, no tutorial sobre grupos e parêntesis em regex, estávamos em nossa saga em criar um script que vai detectar um número de telefone em uma string qualquer (pode escrever até a bíblia nessa string...provavelmente você não vai achar nenhum número de telefone na bíblia...um trecho de uma música do Iron Maiden, talvez...).


Porém, um número pode ter os seguintes formatos:
  • xx yyyy-zzzz
  • xx yyyyzzzz
  • xxyyyyzzzz


Veja bem...pode ser um OU outro OU outro...OU, entendeu?
Sim, vamos usar o caractere de pipe para detectar qualquer um desses tipos de números.


  • xx yyyy-zzzz, representamos por:  \d{2} \d{4}-\d{4}
  • xx yyyy-zzzz, representamos por: \d{3} \d{4}\d{4} ou simplesmente: \d{3} \d{8}
  • xxyyyyzzzz, representamos simplesmente por: \d{10}


E prontinho. Dentro da regex, separamos cada uma desses padrões pelo caractere de pipe |, e as regex em Python fazem o resto, vão buscar qualquer um desses três padrões.

Veja como fica nosso código:

import re

while True:
 texto = input("Digite sua string: " )

 minhaRegex = re.findall(r'\d{2} \d{4}-\d{4}|\d{2} \d{8}|\d{10}', texto)
 print("Gostei dessas: ", minhaRegex)

Olhe como nossos scripts detectores de números de telefone estão ficando cada vez mais eficientes!
E o mais bacana: estamos fazendo cada vez mais, escrevendo cada vez menos código.

Essa é a beleza da programação em Python.

Exercício de Regex

Faça um script que detecte números no formato:
(xx) yyyy-zzzz
(xx) yyyyzzzz

Para detectar o parêntese, você tem que escapar ele: \( e \), talquei ?
Escreva seu script aí nos comentários.

Colocamos o nosso script na:
Apostila Python Progressivo

Nenhum comentário:

Postar um comentário