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