English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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ão | String | Corresponde? |
---|---|---|
^a...s$ | abs | Nenhuma correspondência |
alias | Corresponde | |
abyss | Corresponde | |
Alias | Nenhuma correspondência | |
Abacux | Nenhuma 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.
Para especificar uma expressão regular, usamos caracteres meta. No exemplo acima, ^ e $ são 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ão | String | Corresponde? |
---|---|---|
[abc] | a | 1correspondências |
ac | 2correspondências | |
Hey Jude | Nenhuma correspondência | |
abc de ca | 5correspondê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ão | String | Corresponde? |
---|---|---|
.. | a | Nenhuma correspondência |
ac | 1correspondências | |
acd | 1correspondências | |
acde | 2um 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ão | String | Corresponde? |
---|---|---|
^a | a | 1correspondências |
abc | 1correspondências | |
bac | Nenhuma correspondência | |
^ab | abc | 1correspondências |
acb | sem 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ão | String | Corresponde? |
---|---|---|
a$ | a | 1correspondências |
formula | 1correspondências | |
cab | Nenhuma correspondência |
*- sinal de asterisco
O sinal de asterisco * coincide com*Correspondezero ou maisdo padrão restante.
Expressão | String | Corresponde? |
---|---|---|
ma*n | mn | 1correspondências |
man | 1correspondências | |
maaan | 1correspondências | |
main | + | |
woman | 1correspondências |
+- sinal de mais
O sinal de mais + coincide com+Correspondeum ou maisdo padrão restante.
Expressão | String | Corresponde? |
---|---|---|
ma+n | mn | sem correspondência (sem caractere a) |
man | 1correspondências | |
maaan | 1correspondências | |
main | sem correspondência (a seguido por n) | |
woman | 1correspondências |
?- sinal de interrogação
O sinal de interrogação ? coincide comzero ou uma ocorrência.do padrão restante.
Expressão | String | Corresponde? |
---|---|---|
ma?n | mn | 1correspondências |
man | 1correspondências | |
maaan | sem correspondência (maior que um caractere a) | |
main | sem correspondência (a seguido por n) | |
woman | 1correspondências |
{}- {
chavesn vezes. Isso significa que pelo menosestilo, e no máximo repetirm vezesestilo.
Expressão | String | Corresponde? |
---|---|---|
a{2,3} | abc dat | Nenhuma correspondência |
abc daat | 1um match (em) daat | |
aabc daaat | 2um item de match (localizadoaabc e) daaat | |
aabc daaaat | 2um 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ão | String | Corresponde? |
---|---|---|
[0-9]{2,4} | ab123csde | 1um match (em um lugar coincide) ab123csde |
12 and 345673 | 2correspondências (localizadas)12 and 345673 | |
1 and 2 | Nenhuma correspondência |
|- caractere vertical
O caractere vertical | é usado para exibir alternativas (operador ou).
Expressão | String | Corresponde? |
---|---|---|
a|b | cde | Nenhuma correspondência |
ade | 1um match (em um lugar coincideade) | |
acdbea | 3correspondê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ão | String | Corresponde? |
---|---|---|
(a|b|c)xz | ab xz | Nenhuma correspondência |
abxz | 1correspondências (em local de correspondência) abxz | |
axz cabxz | 2correspondê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ão | String | Corresponde? |
---|---|---|
\Athe | o sol | Corresponde |
No sol | Nenhuma correspondência |
\b -se o caractere especificado estiver no início ou no fim da palavra, ele corresponde.
Expressão | String | Corresponde? |
---|---|---|
\bfoo | football | Corresponde |
a football | Corresponde | |
afootball | Nenhuma correspondência | |
foo\b | the foo | Corresponde |
the afoo test | Corresponde | |
the afootest | Nenhuma correspondência |
\B-com \b. Se o caractere especificadonão estáao início ou ao fim da palavra, ele corresponde.
Expressão | String | Corresponde? |
---|---|---|
\Bfoo | football | Nenhuma correspondência |
a football | Nenhuma correspondência | |
afootball | Corresponde | |
foo\B | the foo | Nenhuma correspondência |
the afoo test | Nenhuma correspondência | |
the afootest | Corresponde |
\d-Corresponde a qualquer caractere decimal. É equivalente a [0-9]
Expressão | String | Corresponde? |
---|---|---|
\d | 12abc3 | 3correspondências (localizadas)12abc3 |
Python | Nenhuma correspondência |
\D-Corresponde a qualquer caractere não decimal. É equivalente a [^0-9]
Expressão | String | Corresponde? |
---|---|---|
\D | 1ab34"50 | 3correspondências (localizadas)1ab34"50 |
1345 | Nenhuma correspondência |
\s-Corresponde ao local onde a string contém qualquer caractere de espaço. É equivalente a [ \t\n\r\f\v].
Expressão | String | Corresponde? |
---|---|---|
\s | Python RegEx | 1correspondências |
PythonRegEx | Nenhuma correspondência |
\S-Corresponde ao local onde a string contém qualquer caractere não branco. É equivalente a [^ \t\n\r\f\v].
Expressão | String | Corresponde? |
---|---|---|
\S | a b | 2correspondê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ão | String | Corresponde? |
---|---|---|
\w | 12&": ;c | 3correspondências (localizadas)12&": ;c |
%"> ! | Nenhuma correspondência |
\W-Corresponde a qualquer caractere não alfanumérico. É equivalente a [^a-zA-Z0-9_]
Expressão | String | Corresponde? |
---|---|---|
\W | 1a2%c | 1correspondências (em)1a2%c |
Python | Nenhuma correspondência |
\Z -Se o caractere especificado estiver no final da string, ele corresponde.
Expressão | String | Corresponde? |
---|---|---|
\ZPython | Gosto de Python | 1correspondências |
Gosto de Python | Nenhuma 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.
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.
O método re.findall() retorna uma lista de strings que contém todas as ocorrências correspondentes.
# 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.
O método split divide a string correspondente ao padrão e retorna uma lista de strings que ocorreram a divisão.
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.
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.
# 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() é semelhante a re.sub(), esperando que retorne um tupla contendo2um tupla contendo a nova string e a quantidade de substituições feitas.
# 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(
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)
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.
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:
O método group() retorna a parte correspondente da string.
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.
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.
import re string = '\n and \r are escape sequences.' result = re.findall(r'[\n\r]', string) print(result) # Output: ['\n', '\r']