Python RegEx
Python RegEx
Neste tutorial, você aprenderá sobre expressões regulares (RegEx) e usará o módulo re do Python para trabalhar com RegEx (com a ajuda de exemplos).
Um Reg ular Ex pression (RegEx) é uma sequência de caracteres que define um padrão de pesquisa. Por exemplo,
^a...s$ O código acima define um padrão RegEx. O padrão é:qualquer string de cinco letras começando com a e terminando com s .
Um padrão definido usando RegEx pode ser usado para corresponder a uma string.
| Expressão | String | Combinado? |
|---|---|---|
^a...s$ | abs | Nenhuma correspondência |
alias | Corresponder | |
abyss | Corresponder | |
Alias | Nenhuma correspondência | |
An abacus | Nenhuma correspondência |
Python tem um módulo chamado
re para trabalhar com RegEx. Aqui está um exemplo:
import re
pattern = '^a...s$'
test_string = 'abyss'
result = re.match(pattern, test_string)
if result:
print("Search successful.")
else:
print("Search unsuccessful.")
Aqui, usamos
re.match() função para pesquisar padrão dentro da test_string . O método retorna um objeto de correspondência se a pesquisa for bem-sucedida. Caso contrário, ele retornará None . Existem várias outras funções definidas no re módulo para trabalhar com RegEx. Antes de explorarmos isso, vamos aprender sobre as próprias expressões regulares.
Se você já conhece o básico do RegEx, pule para o Python RegEx.
Especificar padrão usando RegEx
Para especificar expressões regulares, são usados metacaracteres. No exemplo acima,
^ e $ são metacaracteres. Metacaracteres
Metacaracteres são caracteres que são interpretados de maneira especial por um mecanismo RegEx. Aqui está uma lista de metacaracteres:
[] . ^ $ * + ? {} () \ |
[] - Colchetes Os colchetes especificam um conjunto de caracteres que você deseja corresponder.
| Expressão | String | Combinado? |
|---|---|---|
[abc] | a | 1 correspondência |
ac | 2 correspondências | |
Hey Jude | Nenhuma correspondência | |
abc de ca | 5 correspondências |
Aqui,
[abc] irá corresponder se a string que você está tentando corresponder contiver qualquer um dos a , b ou c . Você também pode especificar um intervalo de caracteres usando
- dentro de colchetes. [a-e]é igual a[abcde].[1-4]é igual a[1234].[0-39]é igual a[01239].
Você pode complementar (inverter) o conjunto de caracteres usando o acento circunflexo
^ símbolo no início de um colchete. [^abc]significa qualquer caractere exceto a ou b ou c .[^0-9]significa qualquer caractere que não seja dígito.
. - Período Um ponto corresponde a qualquer caractere único (exceto nova linha
'\n' ). | Expressão | String | Combinado? |
|---|---|---|
.. | a | Nenhuma correspondência |
ac | 1 correspondência | |
acd | 1 correspondência | |
acde | 2 correspondências (contém 4 caracteres) |
^ - Acento circunflexo O símbolo de acento circunflexo
^ é usado para verificar se uma string começa com um determinado personagem. | Expressão | String | Combinado? |
|---|---|---|
^a | a | 1 correspondência |
abc | 1 correspondência | |
bac | Nenhuma correspondência | |
^ab | abc | 1 correspondência |
acb | Nenhuma correspondência (começa com a mas não seguido por b ) |
$ - Dólar O símbolo do dólar
$ é usado para verificar se uma string termina com um determinado personagem. | Expressão | String | Combinado? |
|---|---|---|
a$ | a | 1 correspondência |
formula | 1 correspondência | |
cab | Nenhuma correspondência |
* - Estrela O símbolo de estrela
* corresponde a zero ou mais ocorrências do padrão que lhe resta. | Expressão | String | Combinado? |
|---|---|---|
ma*n | mn | 1 correspondência |
man | 1 correspondência | |
maaan | 1 correspondência | |
main | Nenhuma correspondência (a não é seguido por n ) | |
woman | 1 correspondência |
+ - Mais O símbolo de mais
+ corresponde a uma ou mais ocorrências do padrão que lhe resta. | Expressão | String | Combinado? |
|---|---|---|
ma+n | mn | Nenhuma correspondência (sem a personagem) |
man | 1 correspondência | |
maaan | 1 correspondência | |
main | Sem correspondência (a não é seguido por n) | |
woman | 1 correspondência |
? - Ponto de interrogação O símbolo de ponto de interrogação
? corresponde a zero ou uma ocorrência do padrão que lhe resta. | Expressão | String | Combinado? |
|---|---|---|
ma?n | mn | 1 correspondência |
man | 1 correspondência | |
maaan | Nenhuma correspondência (mais de um a personagem) | |
main | Sem correspondência (a não é seguido por n) | |
woman | 1 correspondência |
{} - Aparelhos Considere este código:
{n,m} . Isso significa que pelo menos n , e no máximo m repetições do padrão deixado para ele. | Expressão | String | Combinado? |
|---|---|---|
a{2,3} | abc dat | Nenhuma correspondência |
abc daat | 1 correspondência (em daat ) | |
aabc daaat | 2 correspondências (em aabc e daaat ) | |
aabc daaaat | 2 correspondências (em aabc e daaaat ) |
Vamos tentar mais um exemplo. Este RegEx
[0-9]{2, 4} corresponde a pelo menos 2 dígitos, mas não mais de 4 dígitos | Expressão | String | Combinado? |
|---|---|---|
[0-9]{2,4} | ab123csde | 1 correspondência (correspondência em ab123csde ) |
12 and 345673 | 3 correspondências (12 , 3456 , 73 ) | |
1 and 2 | Nenhuma correspondência |
| - Alternância Barra vertical
| é usado para alternância (or operador). | Expressão | String | Combinado? |
|---|---|---|
a|b | cde | Nenhuma correspondência |
ade | 1 correspondência (correspondência em ade ) | |
acdbea | 3 correspondências (em acdbea ) |
Aqui,
a|b corresponde a qualquer string que contenha a ou b () - Grupo Parênteses
() é usado para agrupar subpadrões. Por exemplo, (a|b|c)xz corresponde a qualquer string que corresponda a a ou b ou c seguido por xz | Expressão | String | Combinado? |
|---|---|---|
(a|b|c)xz | ab xz | Nenhuma correspondência |
abxz | 1 correspondência (correspondência em abxz ) | |
axz cabxz | 2 correspondências (em axzbc cabxz ) |
\ - Barra invertida Reação
\ é usado para escapar de vários caracteres, incluindo todos os metacaracteres. Por exemplo, \$a corresponde se uma string contiver $ seguido por a . Aqui, $ não é interpretado por um mecanismo RegEx de uma maneira especial. Se você não tiver certeza se um caractere tem um significado especial ou não, você pode colocar
\ na frente dele. Isso garante que o personagem não seja tratado de maneira especial. Sequências especiais
Sequências especiais facilitam a escrita de padrões comumente usados. Aqui está uma lista de sequências especiais:
\A - Corresponde se os caracteres especificados estiverem no início de uma string. | Expressão | String | Combinado? |
|---|---|---|
\Athe | the sun | Corresponder |
In the sun | Nenhuma correspondência |
\b - Corresponde se os caracteres especificados estiverem no início ou no final de uma palavra. | Expressão | String | Combinado? |
|---|---|---|
\bfoo | football | Corresponder |
a football | Corresponder | |
afootball | Nenhuma correspondência | |
foo\b | the foo | Corresponder |
the afoo test | Corresponder | |
the afootest | Nenhuma correspondência |
\B - Oposto de \b . Corresponde se os caracteres especificados não no início ou no final de uma palavra. | Expressão | String | Combinado? |
|---|---|---|
\Bfoo | football | Nenhuma correspondência |
a football | Nenhuma correspondência | |
afootball | Corresponder | |
foo\B | the foo | Nenhuma correspondência |
the afoo test | Nenhuma correspondência | |
the afootest | Corresponder |
\d - Corresponde a qualquer dígito decimal. Equivalente a [0-9] | Expressão | String | Combinado? |
|---|---|---|
\d | 12abc3 | 3 correspondências (em 12abc3 ) |
Python | Nenhuma correspondência |
\D - Corresponde a qualquer dígito não decimal. Equivalente a [^0-9] | Expressão | String | Combinado? |
|---|---|---|
\D | 1ab34"50 | 3 correspondências (em 1ab34"50 ) |
1345 | Nenhuma correspondência |
\s - Corresponde onde uma string contém qualquer caractere de espaço em branco. Equivalente a [ \t\n\r\f\v] . | Expressão | String | Combinado? |
|---|---|---|
\s | Python RegEx | 1 correspondência |
PythonRegEx | Nenhuma correspondência |
\S - Corresponde onde uma string contém qualquer caractere que não seja espaço em branco. Equivalente a [^ \t\n\r\f\v] . | Expressão | String | Combinado? |
|---|---|---|
\S | a b | 2 correspondências (em a b ) |
| Nenhuma correspondência |
\w - Corresponde a qualquer caractere alfanumérico (dígitos e alfabetos). Equivalente a [a-zA-Z0-9_] . A propósito, sublinhe _ também é considerado um caractere alfanumérico. | Expressão | String | Combinado? |
|---|---|---|
\w | 12&": ;c | 3 correspondências (em 12&": ;c ) |
%"> ! | Nenhuma correspondência |
\W - Corresponde a qualquer caractere não alfanumérico. Equivalente a [^a-zA-Z0-9_] | Expressão | String | Combinado? |
|---|---|---|
\W | 1a2%c | 1 correspondência (em 1a2%c ) |
Python | Nenhuma correspondência |
\Z - Corresponde se os caracteres especificados estiverem no final de uma string. | Expressão | String | Combinado? |
|---|---|---|
Python\Z | I like Python | 1 correspondência |
I like Python Programming | Nenhuma correspondência | |
Python is fun. | Nenhuma correspondência |
Dica: Para construir e testar expressões regulares, você pode usar ferramentas de teste RegEx, como regex101. Esta ferramenta não só ajuda na criação de expressões regulares, mas também ajuda a aprender.
Agora que você entende o básico do RegEx, vamos discutir como usar o RegEx em seu código Python.
Python RegEx
Python tem um módulo chamado
re trabalhar com expressões regulares. Para usá-lo, precisamos importar o módulo.
import re O módulo define várias funções e constantes para trabalhar com RegEx.
re.findall()
O
re.findall() O método retorna uma lista de strings contendo todas as correspondências. Exemplo 1:re.findall()
# Program to extract numbers from a string
import re
string = 'hello 12 hi 89. Howdy 34'
pattern = '\d+'
result = re.findall(pattern, string)
print(result)
# Output: ['12', '89', '34']
Se o padrão não for encontrado,
re.findall() retorna uma lista vazia. re.split()
O
re.split O método divide a string onde há uma correspondência e retorna uma lista de strings onde as divisões ocorreram. Exemplo 2:re.split()
import re
string = 'Twelve:12 Eighty nine:89.'
pattern = '\d+'
result = re.split(pattern, string)
print(result)
# Output: ['Twelve:', ' Eighty nine:', '.']
Se o padrão não for encontrado,
re.split() retorna uma lista contendo a string original. Você pode passar em
maxsplit argumento para o re.split() método. É o número máximo de divisões que ocorrerão.
import re
string = 'Twelve:12 Eighty nine:89 Nine:9.'
pattern = '\d+'
# maxsplit = 1
# split only at the first occurrence
result = re.split(pattern, string, 1)
print(result)
# Output: ['Twelve:', ' Eighty nine:89 Nine:9.']
A propósito, o valor padrão de
maxsplit é 0; significando todas as divisões possíveis. re.sub()
A sintaxe de
re.sub() é:
re.sub(pattern, replace, string) O método retorna uma string onde as ocorrências correspondentes são substituídas pelo conteúdo de replace variável.
Exemplo 3:re.sub()
# Program to remove all whitespaces
import re
# multiline string
string = 'abc 12\
de 23 \n f45 6'
# matches all whitespace characters
pattern = '\s+'
# empty string
replace = ''
new_string = re.sub(pattern, replace, string)
print(new_string)
# Output: abc12de23f456
Se o padrão não for encontrado,
re.sub() retorna a string original. Você pode passar count como um quarto parâmetro para o
re.sub() método. Se omitido, resulta em 0. Isso substituirá todas as ocorrências.
import re
# multiline string
string = 'abc 12\
de 23 \n f45 6'
# matches all whitespace characters
pattern = '\s+'
replace = ''
new_string = re.sub(r'\s+', replace, string, 1)
print(new_string)
# Output:
# abc12de 23
# f45 6
re.subn()
O
re.subn() é semelhante a re.sub() exceto que retorna uma tupla de 2 itens contendo a nova string e o número de substituições feitas. Exemplo 4:re.subn()
# Program to remove all whitespaces
import re
# multiline string
string = 'abc 12\
de 23 \n f45 6'
# matches all whitespace characters
pattern = '\s+'
# empty string
replace = ''
new_string = re.subn(pattern, replace, string)
print(new_string)
# Output: ('abc12de23f456', 4)
re.search()
O
re.search() O método recebe dois argumentos:um padrão e uma string. O método procura o primeiro local onde o padrão RegEx produz uma correspondência com a string. Se a pesquisa for bem-sucedida,
re.search() retorna um objeto de correspondência; se não, ele retorna None .
match = re.search(pattern, str) Exemplo 5:re.search()
import re
string = "Python is fun"
# check if 'Python' is at the beginning
match = re.search('\APython', string)
if match:
print("pattern found inside the string")
else:
print("pattern not found")
# Output: pattern found inside the string
Aqui, combinar contém um objeto de correspondência.
Objeto de correspondência
Você pode obter métodos e atributos de um objeto de correspondência usando a função dir().
Alguns dos métodos e atributos comumente usados de objetos de correspondência são:
match.group()
O
group() O método retorna a parte da string onde há uma correspondência. Exemplo 6:objeto de correspondência
import re
string = '39801 356, 2102 1111'
# Three digit number followed by space followed by two digit number
pattern = '(\d{3}) (\d{2})'
# match variable contains a Match object.
match = re.search(pattern, string)
if match:
print(match.group())
else:
print("pattern not found")
# Output: 801 35
Aqui, combinar variável contém um objeto de correspondência.
Nosso padrão
(\d{3}) (\d{2}) tem dois subgrupos (\d{3}) e (\d{2}) . Você pode obter a parte da string desses subgrupos entre parênteses. Veja como:
>>> match.group(1)
'801'
>>> match.group(2)
'35'
>>> match.group(1, 2)
('801', '35')
>>> match.groups()
('801', '35')
match.start(), match.end() e match.span()
O
start() A função retorna o índice do início da substring correspondente. Da mesma forma, end() retorna o índice final da substring correspondente.
>>> match.start()
2
>>> match.end()
8 O
span() A função retorna uma tupla contendo o índice inicial e final da parte correspondente.
>>> match.span()
(2, 8) match.re e match.string
O
re atributo de um objeto correspondente retorna um objeto de expressão regular. Da mesma forma, string atributo retorna a string passada.
>>> match.re
re.compile('(\\d{3}) (\\d{2})')
>>> match.string
'39801 356, 2102 1111'
Cobrimos todos os métodos comumente usados definidos no
re módulo. Se você quiser saber mais, visite o módulo Python 3 re. Usando o prefixo r antes de RegEx
Quando r ou R prefix é usado antes de uma expressão regular, significa string bruta. Por exemplo,
'\n' é uma nova linha enquanto r'\n' significa dois caracteres:uma barra invertida \ seguido por n . Reação
\ é usado para escapar de vários caracteres, incluindo todos os metacaracteres. No entanto, usando r prefixo faz \ tratar como um personagem normal. Exemplo 7:string bruta usando o prefixo r
import re
string = '\n and \r are escape sequences.'
result = re.findall(r'[\n\r]', string)
print(result)
# Output: ['\n', '\r']
python