Python 3 - Expressões regulares
Uma expressão regular é uma sequência especial de caracteres que o ajuda a encontrar ou encontrar outras strings ou conjuntos de strings, usando uma sintaxe especializada mantida em um padrão. As expressões regulares são amplamente utilizadas no mundo UNIX.
O módulo refornece suporte completo para expressões regulares semelhantes a Perl em Python. ore módulo levanta a exceção re.error se ocorrer um erro ao compilar ou usar uma expressão regular.
Cobriríamos duas funções importantes, que seriam usadas para lidar com expressões regulares. No entanto, uma pequena coisa primeiro: Existem vários caracteres, que teriam um significado especial quando usados em expressões regulares. Para evitar qualquer confusão ao lidar com expressões regulares, usaríamos Raw Strings comor'expression'.
Padrões básicos que correspondem a caracteres únicos
Sr. Não. | Expressão e correspondências |
---|---|
1 | a, X, 9, < caracteres comuns apenas combinam com eles mesmos. |
2 | . (a period) corresponde a qualquer caractere único, exceto nova linha '\ n' |
3 | \w corresponde a um caractere de "palavra": uma letra ou dígito ou barra [a-zA-Z0-9_]. |
4 | \W corresponde a qualquer caractere diferente de palavra. |
5 | \b limite entre palavra e não palavra |
6 | \s corresponde a um único caractere de espaço em branco - espaço, nova linha, retorno, tabulação |
7 | \S corresponde a qualquer caractere sem espaço em branco. |
8 | \t, \n, \r guia, nova linha, retorno |
9 | \d dígito decimal [0-9] |
10 | ^ corresponde ao início da string |
11 | $ coincidir com o final da corda |
12 | \ inibir o "especialismo" de um personagem. |
Sinalizadores de compilação
Sinalizadores de compilação permitem modificar alguns aspectos de como as expressões regulares funcionam. Sinalizadores estão disponíveis no módulo re sob dois nomes, um nome longo, comoIGNORECASE e uma forma curta de uma letra, como I.
Sr. Não. | Bandeira e Significado |
---|---|
1 | ASCII, A Faz com que vários escapes como \ w, \ b, \ se \ d correspondam apenas em caracteres ASCII com a respectiva propriedade. |
2 | DOTALL, S Faça, combine qualquer caractere, incluindo novas linhas |
3 | IGNORECASE, I Faça correspondências que não diferenciam maiúsculas de minúsculas |
4 | LOCALE, L Faça uma correspondência de acordo com a localidade |
5 | MULTILINE, M Correspondência multilinha, afetando ^ e $ |
6 | VERBOSE, X (for ‘extended’) Habilite REs detalhados, que podem ser organizados de forma mais limpa e compreensível |
A função de correspondência
Esta função tenta combinar o padrão RE com a string com sinalizadores opcionais .
Aqui está a sintaxe para esta função -
re.match(pattern, string, flags = 0)
Aqui está a descrição dos parâmetros -
Sr. Não. | Parâmetro e Descrição |
---|---|
1 | pattern Esta é a expressão regular a ser correspondida. |
2 | string Esta é a string, que seria pesquisada para corresponder ao padrão no início da string. |
3 | flags Você pode especificar sinalizadores diferentes usando OR bit a bit (|). Esses são modificadores, que estão listados na tabela a seguir. |
A função re.match retorna ummatch objeto de sucesso, Noneem caso de falha. Usamos a função group (num) ou groups () dematch objeto para obter a expressão correspondente.
Sr. Não. | Método e descrição do objeto de correspondência |
---|---|
1 | group(num = 0) Este método retorna a correspondência inteira (ou número de subgrupo específico) |
2 | groups() Este método retorna todos os subgrupos correspondentes em uma tupla (vazio se não houver nenhum) |
Exemplo
#!/usr/bin/python3
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
print ("matchObj.group() : ", matchObj.group())
print ("matchObj.group(1) : ", matchObj.group(1))
print ("matchObj.group(2) : ", matchObj.group(2))
else:
print ("No match!!")
Quando o código acima é executado, ele produz o seguinte resultado -
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
A função de pesquisa
Esta função procura a primeira ocorrência do padrão RE dentro da string com sinalizadores opcionais .
Aqui está a sintaxe para esta função -
re.search(pattern, string, flags = 0)
Aqui está a descrição dos parâmetros -
Sr. Não. | Parâmetro e Descrição |
---|---|
1 | pattern Esta é a expressão regular a ser correspondida. |
2 | string Esta é a string, que seria pesquisada para corresponder ao padrão em qualquer lugar da string. |
3 | flags Você pode especificar sinalizadores diferentes usando OR bit a bit (|). Esses são modificadores, que estão listados na tabela a seguir. |
A função re.search retorna ummatch objeto de sucesso, noneem caso de falha. Usamos a função group (num) ou groups () dematch objeto para obter a expressão correspondente.
Sr. Não. | Método e descrição do objeto de correspondência |
---|---|
1 | group(num = 0) Este método retorna a correspondência inteira (ou número de subgrupo específico) |
2 | groups() Este método retorna todos os subgrupos correspondentes em uma tupla (vazio se não houver nenhum) |
Exemplo
#!/usr/bin/python3
import re
line = "Cats are smarter than dogs";
searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)
if searchObj:
print ("searchObj.group() : ", searchObj.group())
print ("searchObj.group(1) : ", searchObj.group(1))
print ("searchObj.group(2) : ", searchObj.group(2))
else:
print ("Nothing found!!")
Quando o código acima é executado, ele produz o seguinte resultado -
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
Matching Versus Searching
Python oferece duas operações primitivas diferentes baseadas em expressões regulares: match verifica se há uma correspondência apenas no início da string, enquanto search verifica se há uma correspondência em qualquer lugar da string (é o que o Perl faz por padrão).
Exemplo
#!/usr/bin/python3
import re
line = "Cats are smarter than dogs";
matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
print ("match --> matchObj.group() : ", matchObj.group())
else:
print ("No match!!")
searchObj = re.search( r'dogs', line, re.M|re.I)
if searchObj:
print ("search --> searchObj.group() : ", searchObj.group())
else:
print ("Nothing found!!")
Quando o código acima é executado, ele produz o seguinte resultado -
No match!!
search --> matchObj.group() : dogs
Pesquisar e substituir
Um dos mais importantes re métodos que usam expressões regulares é sub.
Sintaxe
re.sub(pattern, repl, string, max=0)
Este método substitui todas as ocorrências do padrão RE na string por repl , substituindo todas as ocorrências, a menos que max seja fornecido. Este método retorna uma string modificada.
Exemplo
#!/usr/bin/python3
import re
phone = "2004-959-559 # This is Phone Number"
# Delete Python-style comments
num = re.sub(r'#.*$', "", phone)
print ("Phone Num : ", num)
# Remove anything other than digits
num = re.sub(r'\D', "", phone)
print ("Phone Num : ", num)
Quando o código acima é executado, ele produz o seguinte resultado -
Phone Num : 2004-959-559
Phone Num : 2004959559
Modificadores de expressão regular: sinalizadores de opção
Literais de expressão regular podem incluir um modificador opcional para controlar vários aspectos de correspondência. Os modificadores são especificados como um sinalizador opcional. Você pode fornecer vários modificadores usando OU exclusivo (|), conforme mostrado anteriormente e pode ser representado por um destes -
Sr. Não. | Modificador e descrição |
---|---|
1 | re.I Executa correspondência que não diferencia maiúsculas de minúsculas. |
2 | re.L Interpreta palavras de acordo com o local atual. Essa interpretação afeta o grupo alfabético (\ w e \ W), bem como o comportamento dos limites das palavras (\ b e \ B). |
3 | re.M Faz $ corresponder ao final de uma linha (não apenas ao final da string) e faz ^ corresponder ao início de qualquer linha (não apenas ao início da string). |
4 | re.S Faz com que um ponto (ponto) corresponda a qualquer caractere, incluindo uma nova linha. |
5 | re.U Interpreta as letras de acordo com o conjunto de caracteres Unicode. Este sinalizador afeta o comportamento de \ w, \ W, \ b, \ B. |
6 | re.X Permite uma sintaxe de expressão regular "mais bonita". Ele ignora o espaço em branco (exceto dentro de um conjunto [] ou quando escapado por uma barra invertida) e trata # sem escape como um marcador de comentário. |
Padrões de Expressão Regular
Exceto para os personagens de controle, (+ ? . * ^ $ ( ) [ ] { } | \), todos os personagens se combinam. Você pode escapar de um caractere de controle precedendo-o com uma barra invertida.
A tabela a seguir lista a sintaxe da expressão regular que está disponível em Python -
Sr. Não. | Parâmetro e Descrição |
---|---|
1 | ^ Corresponde ao início da linha. |
2 | $ Corresponde ao fim da linha. |
3 | . Corresponde a qualquer caractere único, exceto nova linha. Usar a opção m permite que ele corresponda a nova linha também. |
4 | [...] Corresponde a qualquer caractere único entre colchetes. |
5 | [^...] Corresponde a qualquer caractere único que não esteja entre colchetes |
6 | re* Corresponde a 0 ou mais ocorrências da expressão anterior. |
7 | re+ Corresponde a 1 ou mais ocorrências da expressão anterior. |
8 | re? Corresponde a 0 ou 1 ocorrência da expressão anterior. |
9 | re{ n} Corresponde exatamente ao número n de ocorrências da expressão anterior. |
10 | re{ n,} Corresponde a n ou mais ocorrências da expressão anterior. |
11 | re{ n, m} Corresponde a pelo menos n e no máximo m ocorrências da expressão anterior. |
12 | a|b Corresponde a a ou b. |
13 | (re) Agrupa expressões regulares e lembra o texto correspondente. |
14 | (?imx) Alterna temporariamente as opções i, m ou x em uma expressão regular. Se estiver entre parênteses, apenas essa área é afetada. |
15 | (?-imx) Desativa temporariamente as opções i, m ou x em uma expressão regular. Se estiver entre parênteses, apenas essa área é afetada. |
16 | (?: re) Agrupa expressões regulares sem lembrar o texto correspondente. |
17 | (?imx: re) Alterna temporariamente as opções i, m ou x entre parênteses. |
18 | (?-imx: re) Desativa temporariamente as opções i, m ou x entre parênteses. |
19 | (?#...) Comente. |
20 | (?= re) Especifica a posição usando um padrão. Não tem alcance. |
21 | (?! re) Especifica a posição usando negação de padrão. Não tem alcance. |
22 | (?> re) Corresponde ao padrão independente sem retrocesso. |
23 | \w Corresponde a caracteres de palavras. |
24 | \W Corresponde a caracteres que não sejam palavras. |
25 | \s Corresponde ao espaço em branco. Equivalente a [\ t \ n \ r \ f]. |
26 | \S Corresponde a espaços não brancos. |
27 | \d Corresponde aos dígitos. Equivalente a [0-9]. |
28 | \D Corresponde a nondigits. |
29 | \A Corresponde ao início da string. |
30 | \Z Corresponde ao final da string. Se houver uma nova linha, ela corresponderá imediatamente antes da nova linha. |
31 | \z Corresponde ao final da string. |
32 | \G As partidas apontam onde a última partida terminou. |
33 | \b Corresponde aos limites da palavra quando fora dos colchetes. Corresponde ao backspace (0x08) quando entre colchetes. |
34 | \B Corresponde a limites não-palavra. |
35 | \n, \t, etc. Corresponde a novas linhas, retornos de carro, guias, etc. |
36 | \1...\9 Corresponde à enésima subexpressão agrupada. |
37 | \10 Corresponde à enésima subexpressão agrupada, se já houver correspondência. Caso contrário, refere-se à representação octal de um código de caractere. |
Exemplos de expressão regular
Personagens literais
Sr. Não. | Exemplo e descrição |
---|---|
1 | python Corresponde a "python". |
Classes de personagens
Sr. Não. | Exemplo e descrição |
---|---|
1 | [Pp]ython Corresponde a "Python" ou "python" |
2 | rub[ye] Corresponde a "rubi" ou "rube" |
3 | [aeiou] Corresponde a qualquer vogal minúscula |
4 | [0-9] Corresponde a qualquer dígito; igual a [0123456789] |
5 | [a-z] Corresponde a qualquer letra ASCII minúscula |
6 | [A-Z] Corresponde a qualquer letra ASCII maiúscula |
7 | [a-zA-Z0-9] Combine com qualquer uma das opções acima |
8 | [^aeiou] Corresponder a qualquer coisa que não seja uma vogal minúscula |
9 | [^0-9] Corresponde a qualquer coisa que não seja um dígito |
Classes de personagens especiais
Sr. Não. | Exemplo e descrição |
---|---|
1 | . Corresponde a qualquer caractere, exceto nova linha |
2 | \d Corresponde a um dígito: [0-9] |
3 | \D Corresponde a um não-dígito: [^ 0-9] |
4 | \s Corresponde a um caractere de espaço em branco: [\ t \ r \ n \ f] |
5 | \S Corresponder a espaços não-brancos: [^ \ t \ r \ n \ f] |
6 | \w Corresponde a um caractere de palavra única: [A-Za-z0-9_] |
7 | \W Corresponde a um caractere diferente de palavra: [^ A-Za-z0-9_] |
Casos de Repetição
Sr. Não. | Exemplo e descrição |
---|---|
1 | ruby? Corresponde a "rub" ou "ruby": o y é opcional |
2 | ruby* Corresponde a "esfregar" mais 0 ou mais ys |
3 | ruby+ Corresponde a "esfregar" mais 1 ou mais ys |
4 | \d{3} Corresponde exatamente a 3 dígitos |
5 | \d{3,} Corresponde 3 ou mais dígitos |
6 | \d{3,5} Corresponder 3, 4 ou 5 dígitos |
Repetição nada repetitiva
Isso corresponde ao menor número de repetições -
Sr. Não. | Exemplo e descrição |
---|---|
1 | <.*> Repetição gananciosa: corresponde a "<python> perl>" |
2 | <.*?> Nongreedy: corresponde a "<python>" em "<python> perl>" |
Agrupando com parênteses
Sr. Não. | Exemplo e descrição |
---|---|
1 | \D\d+ Nenhum grupo: + repete-se \ d |
2 | (\D\d)+ Agrupado: + repete \ D \ d par |
3 | ([Pp]ython(,)?)+ Corresponde a "Python", "Python, python, python" etc. |
Referências anteriores
Isso corresponde a um grupo anteriormente correspondido novamente -
Sr. Não. | Exemplo e descrição |
---|---|
1 | ([Pp])ython&\1ails Corresponder python e pails ou Python e Pails |
2 | (['"])[^\1]*\1 String entre aspas simples ou duplas. \ 1 corresponde a tudo o que o primeiro grupo correspondeu. \ 2 corresponde ao que o segundo grupo correspondeu, etc. |
Alternativas
Sr. Não. | Exemplo e descrição |
---|---|
1 | python|perl Corresponde a "python" ou "perl" |
2 | rub(y|le) Corresponde a "rubi" ou "rublo" |
3 | Python(!+|\?) "Python" seguido por um ou mais! ou um? |
Âncoras
Isso precisa especificar a posição de correspondência.
Sr. Não. | Exemplo e descrição |
---|---|
1 | ^Python Corresponde a "Python" no início de uma string ou linha interna |
2 | Python$ Corresponde a "Python" no final de uma string ou linha |
3 | \APython Corresponde a "Python" no início de uma string |
4 | Python\Z Corresponde a "Python" no final de uma string |
5 | \bPython\b Corresponde a "Python" em um limite de palavra |
6 | \brub\B \ B é um limite sem palavras: corresponde a "esfregar" em "rube" e "ruby", mas não sozinho |
7 | Python(?=!) Corresponde a "Python", se seguido por um ponto de exclamação. |
8 | Python(?!!) Corresponde a "Python", se não for seguido por um ponto de exclamação. |
Sintaxe especial com parênteses
Sr. Não. | Exemplo e descrição |
---|---|
1 | R(?#comment) Corresponde a "R". Todo o resto é um comentário |
2 | R(?i)uby Não diferencia maiúsculas de minúsculas enquanto corresponde a "uby" |
3 | R(?i:uby) O mesmo que acima |
4 | rub(?:y|le)) Grupo apenas sem criar \ 1 referência anterior |