English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial Básico do Python

Controle de Fluxo do Python

Funções do Python

Tipos de Dados do Python

Operação de Arquivo do Python

Objetos e Classes do Python

Data e Hora do Python

Conhecimento Avançado do Python

Manual de Referência do Python

Expressões Regulares (RegEx) no Python

Neste tutorial, você aprenderá sobre expressão regular (RegEx) e usará o módulo re do Python com RegEx (com a ajuda de exemplos).

Expressão Regular (RegEx) é uma sequência de caracteres que define o padrão de busca. Por exemplo:

^a...s$

O código acima define o padrão RegEx. O padrão é:comacomeça comsque termina comQualquer string de cinco letras.

Os padrões definidos com RegEx podem ser usados para coincidir com strings.

ExpressãoStringCorresponde?
^a...s$absNenhuma correspondência
aliasCorresponde
abyssCorresponde
AliasNenhuma correspondência
AbacuxNenhuma correspondência

O Python tem um módulo chamado reRegEx. Aqui está um exemplo:

import re
pattern = '^a...s$'
test_string = 'abyss'
result = re.match(pattern, test_string)
if result:
  print("Busca bem-sucedida.")
else:
  print("Busca não bem-sucedida.")

Aqui, usamos a função re.match() para procurar padrões na string de teste. Se a busca for bem-sucedida, o método retornará um objeto de correspondência. Caso contrário, retornará None.

reO módulo define outras algumas funções que podem ser usadas com RegEx. Antes de discutir, vamos aprender sobre a expressão regular em si.

Se você já conhece os fundamentos da RegEx, vá paraPython RegEx.

Especificar o padrão usando expressão regular

Para especificar uma expressão regular, usamos caracteres meta. No exemplo acima, ^ e $ são caracteres meta.

caracteres meta

Os caracteres meta são interpretados de maneira especial pelo motor de RegEx. Aqui está a lista de caracteres meta:

[] . ^ $ * + ? {} () \ |

[] - colchetes

Os colchetes especificam um conjunto de caracteres a serem coincididos.

ExpressãoStringCorresponde?
[abc]a1correspondências
ac2correspondências
Hey JudeNenhuma correspondência
abc de ca5correspondências

Aqui, [abc] coincide com, se você quiser coincidir com uma string que contém qualquer a, b ou c.

Você também pode usar-O caractere dentro dos colchetes define um intervalo de caracteres.

  • [a-e] é o mesmo que [abcde].

  • [1-4] é o mesmo que [1234]

  • [0-39] é o mesmo que [01239]

Você pode usar o ^ no início dos colchetes para complementar (inverter) o conjunto de caracteres.

  • [^abc] representa excetoaorborcforadoqualquer caractere.

  • [^0-9] representa qualquer caractere não numérico.

.- ponto

O ponto . coincide com qualquer caractere único (exceto o caractere de nova linha '\n').

ExpressãoStringCorresponde?
..aNenhuma correspondência
ac1correspondências
acd1correspondências
acde2um item de match (contém4caractere)

^- sinal de inserção

O sinal de inserção ^ é usado para verificar se a string começa com um caractere específico.

ExpressãoStringCorresponde?
^aa1correspondências
abc1correspondências
bacNenhuma correspondência
^ababc1correspondências
acbsem correspondência (começa com a, mas não tem b após)

$- dólar

O símbolo de dólar $ é usado para verificar se a stringcomum caractere específicofim.

ExpressãoStringCorresponde?
a$a1correspondências
formula1correspondências
cabNenhuma correspondência

*- sinal de asterisco

O sinal de asterisco * coincide com*Correspondezero ou maisdo padrão restante.

ExpressãoStringCorresponde?
ma*nmn1correspondências
man1correspondências
maaan1correspondências
main+
woman1correspondências

+- sinal de mais

O sinal de mais + coincide com+Correspondeum ou maisdo padrão restante.

ExpressãoStringCorresponde?
ma+nmnsem correspondência (sem caractere a)
man1correspondências
maaan1correspondências
mainsem correspondência (a seguido por n)
woman1correspondências

?- sinal de interrogação

O sinal de interrogação ? coincide comzero ou uma ocorrência.do padrão restante.

ExpressãoStringCorresponde?
ma?nmn1correspondências
man1correspondências
maaansem correspondência (maior que um caractere a)
mainsem correspondência (a seguido por n)
woman1correspondências

{}- {

chavesn vezes. Isso significa que pelo menosestilo, e no máximo repetirm vezesestilo.

ExpressãoStringCorresponde?
a{2,3}abc datNenhuma correspondência
abc daat1um match (em) daat
aabc daaat2um item de match (localizadoaabc e) daaat
aabc daaaat2um item de match (localizadoaabc e) daaaat

Vamos tentar outro exemplo. RegEx [0-9]{2, 4} coincide com pelo menos2posição, mas não exceder4posição

ExpressãoStringCorresponde?
[0-9]{2,4}ab123csde1um match (em um lugar coincide) ab123csde
12 and 3456732correspondências (localizadas)12 and 345673
1 and 2Nenhuma correspondência

|- caractere vertical

O caractere vertical | é usado para exibir alternativas (operador ou).

ExpressãoStringCorresponde?
a|bcdeNenhuma correspondência
ade1um match (em um lugar coincideade)
acdbea3correspondências (localizadas)acdbea

Aqui, a|b coincide com qualquer sequência que contémaorda letra bString

()- parênteses

Os parênteses () são usados para agrupar subpadrões. Por exemplo, (a|b|c)xz coincide com qualquer sequência queaorborcCorresponde e seguido dedo xzString

ExpressãoStringCorresponde?
(a|b|c)xzab xzNenhuma correspondência
abxz1correspondências (em local de correspondência) abxz
axz cabxz2correspondências (localizadas)axzbc cabxz

\- Barra invertida

A barra invertida \ é usada para escapar de vários caracteres, incluindo todos os caracteres meta. Por exemplo,

\$a se a string contiver $ seguido de a, ele corresponde. Aqui, o motor RegEx não o interpreta de forma especial.

Se não tiver certeza de que um caractere tem um significado especial, coloque-o antes de \ . Isso garante que o caractere não será tratado de forma especial.

Séries especiais

Séries especiais tornam mais fácil escrever padrões comuns. Aqui está uma lista de séries especiais:

\A -se o caractere especificado estiver no início da string, ele corresponde.

ExpressãoStringCorresponde?
\Atheo solCorresponde
No solNenhuma correspondência

\b -se o caractere especificado estiver no início ou no fim da palavra, ele corresponde.

ExpressãoStringCorresponde?
\bfoofootballCorresponde
a footballCorresponde
afootballNenhuma correspondência
foo\bthe fooCorresponde
the afoo testCorresponde
the afootestNenhuma correspondência

\B-com \b. Se o caractere especificadonão estáao início ou ao fim da palavra, ele corresponde.

ExpressãoStringCorresponde?
\BfoofootballNenhuma correspondência
a footballNenhuma correspondência
afootballCorresponde
foo\Bthe fooNenhuma correspondência
the afoo testNenhuma correspondência
the afootestCorresponde

\d-Corresponde a qualquer caractere decimal. É equivalente a [0-9]

ExpressãoStringCorresponde?
\d12abc33correspondências (localizadas)12abc3
PythonNenhuma correspondência

\D-Corresponde a qualquer caractere não decimal. É equivalente a [^0-9]

ExpressãoStringCorresponde?
\D1ab34"503correspondências (localizadas)1ab34"50
1345Nenhuma correspondência

\s-Corresponde ao local onde a string contém qualquer caractere de espaço. É equivalente a [ \t\n\r\f\v].

ExpressãoStringCorresponde?
\sPython RegEx1correspondências
PythonRegExNenhuma correspondência

\S-Corresponde ao local onde a string contém qualquer caractere não branco. É equivalente a [^ \t\n\r\f\v].

ExpressãoStringCorresponde?
\Sa b2correspondências (localizadas) a b
   Nenhuma correspondência

\w-Corresponde a qualquer caractere alfanumérico (número e letra). É equivalente a [a-zA-Z0-9_]. Aliás, o sublinhado _ também é considerado um caractere alfanumérico.

ExpressãoStringCorresponde?
\w12&": ;c3correspondências (localizadas)12&": ;c
%"> !Nenhuma correspondência

\W-Corresponde a qualquer caractere não alfanumérico. É equivalente a [^a-zA-Z0-9_]

ExpressãoStringCorresponde?
\W1a2%c1correspondências (em)1a2%c
PythonNenhuma correspondência

\Z -Se o caractere especificado estiver no final da string, ele corresponde.

ExpressãoStringCorresponde?
\ZPythonGosto de Python1correspondências
Gosto de PythonNenhuma correspondência
Python é divertido.Nenhuma correspondência

Dica:Para construir e testar expressões regulares, você pode usar ferramentas de teste de RegEx, comoregexEssa ferramenta não só pode ajudar você a criar expressões regulares, mas também a aprender sobre elas.

Agora que você entendeu os fundamentos do RegEx, vamos discutir como usar RegEx no código Python.

Expressões regulares do Python

O Python tem um módulo chamado re para expressões regulares. Para usá-lo, precisamos importar o módulo.

import re

Este módulo define algumas funções e constantes que podem ser usadas com o RegEx.

re.findall()

O método re.findall() retorna uma lista de strings que contém todas as ocorrências correspondentes.

Example1:re.findall()

# Extrair programa de números de uma string
import re
string = 'hello 12 hi 89. Howdy 34'
pattern = '\d'+'
result = re.findall(pattern, string,) 
print(result)
# Saída: ['']12>>> match.groups()89>>> match.groups()34]

Se o padrão não for encontrado, o re.findall() retorna uma lista vazia.

re.split()

O método split divide a string correspondente ao padrão e retorna uma lista de strings que ocorreram a divisão.

Example2:re.split()

import re
string = 'Twelve:12 Eighty nine:89.
pattern = '\d'+'
result = re.split(pattern, string,) 
print(result)
# Saída: ['Twelve:', 'Eighty nine:', '.']

Se o padrão não for encontrado, o re.split() retorna uma lista que contém uma string vazia.

Você pode passar o parâmetro maxsplit para o método re.split(). Isso é o número máximo de divisões que serão feitas.

import re
string = 'Twelve:12 Eighty nine:89 Nine:9.
pattern = '\d'+'
# maxsplit = 1
# Dividir apenas na primeira ocorrência
result = re.split(pattern, string,) 1( 
print(result)
# Saída: ['Twelve:', 'Eighty nine:']89 Nine:9.']

A propósito, o valor padrão de maxsplit é 0; o valor padrão é 0. Isso significa que todos os resultados de divisão são divididos.

re.sub()

Sintaxe do re.sub():

re.sub(pattern, replace, string)

Este método retorna uma string na qual as ocorrências correspondentes são substituídas pelo conteúdo da variável replace.

Example3:re.sub()

# Programas para remover todos os espaços
import re
# String multilinha
string = 'abc 12\
de 23 \n f45 6'
# Correspondência de todos os caracteres de espaço em branco
pattern = '\s+'
# String vazia
replace = ''
new_string = re.sub(pattern, replace, string) 
print(new_string)
# Saída: abc12de23f456

Se o padrão não for encontrado, o re.sub() retorna a string original.

Você pode passarcountComo quarto parâmetro passado para o método re.sub(). Se omitido, o resultado é 0. Isso substituirá todas as ocorrências do item correspondente.

import re
# String multilinha
string = 'abc 12\
de 23 \n f45 6'
# Correspondência de todos os caracteres de espaço em branco
pattern = '\s+'
replace = ''
new_string = re.sub(r'\s'+', replace, string, 1( 
print(new_string)
# Saída:
# abc12de 23
# f45 6

re.subn()

re.subn() é semelhante a re.sub(), esperando que retorne um tupla contendo2um tupla contendo a nova string e a quantidade de substituições feitas.

Example4:re.subn()

# Programas para remover todos os espaços
import re
# String multilinha
string = 'abc 12\
de 23 \n f45 6'
# Correspondência de todos os caracteres de espaço em branco
pattern = '\s+'
# String vazia
replace = ''
new_string = re.subn(pattern, replace, string) 
print(new_string)
# Saída: ('abc12de23f456', 4(

re.search()

O método re.search() aceita dois parâmetros: padrão e string. Este método busca a primeira ocorrência do padrão regex na string.

Se a busca for bem-sucedida, re.search() retorna um objeto de correspondência. Se não, retorna None.

match = re.search(pattern, str)

Example5:re.search()

import re
string = "Python é divertido"
# Verificar se "Python" está no início
match = re.search('\APython', string)
if match:
  print("padrão encontrado dentro da string")
else:
  print("padrão não encontrado")  
# Saída: padrão encontrado dentro da string

Aqui,contém um objeto match.

Objeto de correspondência

Você pode usardir()A função obtém métodos e propriedades do objeto de correspondência.

Alguns métodos e propriedades comuns do objeto de correspondência são:

match.group()

O método group() retorna a parte correspondente da string.

Example6:Objeto de correspondência

import re
string = '39801 356, 2102 1111'
# Três dígitos, seguidos de espaço, dois dígitos
pattern = '(\d{3}) (\d{2})'
# A variável match contém um objeto Match.
match = re.search(pattern, string) 
if match:
  print(match.group())
else:
  print("padrão não encontrado")
# Saída: 801 35

Aqui,match

The variable contains a match object.3}) (\d{2}) Our pattern (\d{3}) (\d{2}) have two subgroups (\d{

1(
'801'
2(
'35'
1, 2(
>>> match.group(801>>> match.groups()35('
))
>>> match.group(801>>> match.groups()35('

', ''

)

The start() function returns the index of the beginning of the matched substring. Similarly, end() returns the index of the end of the matched substring. match.start(), match.end() and match.span()
2
>>> match.start()
8

>>> match.end()

The span() function returns a tuple containing the start and end indices of the matched part.
>>> match.span()2, 8(

)

The re attribute of the match object returns a regular expression object. Similarly, the string attribute returns the passed string. match.re and match.string

>>> match.re
re.compile('(\\d{3}) (\d{2})'
>>> match.string
'39801 356, 2102 1111'

We have introduced all the commonly used methods defined in the re module. If you want to learn more information, please visitPython 3 re module.

Use the r prefix before RegEx

If you use the r prefix before the regular expressionrorRthe prefix indicates a raw string. For example, '\n' is a new line, while r'\n' represents two characters: a backslash \ followed by n.

The backslash \ is used to escape various characters, including all meta characters. However, usingrThe prefix \ treats it as a regular character.

Example7Use the r prefix for raw strings

import re
string = '\n and \r are escape sequences.'
result = re.findall(r'[\n\r]', string) 
print(result)
# Output: ['\n', '\r']