Python - Expressões Regulares
Uma expressão regular é uma sequência especial de caracteres que ajuda você a combinar ou localizar outras strings ou conjuntos de strings, usando uma sintaxe especializada mantida em um padrão. Expressões regulares são amplamente utilizadas no mundo UNIX.
O módulo Python re fornece suporte completo para expressões regulares do tipo Perl em Python. O módulo re gera 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. Mas 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 como r'expression' .
A correspondência Função
Esta função tenta corresponder ao padrão RE para cadeia 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 -
Nº Sr. | Parâmetro e descrição |
---|---|
1 | padrão Esta é a expressão regular a ser correspondida. |
2 | cadeia Esta é a string, que seria pesquisada para corresponder ao padrão no início da string. |
3 | bandeiras Você pode especificar diferentes sinalizadores usando OR bit a bit (|). Estes são modificadores, que estão listados na tabela abaixo. |
A re.match função retorna uma correspondência objeto em caso de sucesso, Nenhum na falha. Usamosgrupo(num) ou grupos() função de corresponder objeto para obter a expressão correspondente.
Nº Sr. | Método e descrição do objeto de correspondência |
---|---|
1 | grupo(num=0) Este método retorna a correspondência inteira (ou número de subgrupo específico) |
2 | grupos() Este método retorna todos os subgrupos correspondentes em uma tupla (vazio se não houver nenhum) |
Exemplo
Demonstração ao vivo#!/usr/bin/python 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 pesquisa Função
Esta função procura a primeira ocorrência de RE padrão dentro de cadeia 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 -
Nº Sr. | Parâmetro e descrição |
---|---|
1 | padrão Esta é a expressão regular a ser correspondida. |
2 | cadeia Esta é a string, que seria pesquisada para corresponder ao padrão em qualquer lugar da string. |
3 | bandeiras Você pode especificar diferentes sinalizadores usando OR bit a bit (|). Estes são modificadores, que estão listados na tabela abaixo. |
A re.pesquisa função retorna uma correspondência objeto em caso de sucesso, nenhum na falha. Usamos grupo(num) ou grupos() função de corresponder objeto para obter a expressão correspondente.
Nº Sr. | Métodos e descrição do objeto de correspondência |
---|---|
1 | grupo(num=0) Este método retorna a correspondência inteira (ou número de subgrupo específico) |
2 | grupos() Este método retorna todos os subgrupos correspondentes em uma tupla (vazio se não houver nenhum) |
Exemplo
Demonstração ao vivo#!/usr/bin/python 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 -
searchObj.group() : Cats are smarter than dogs searchObj.group(1) : Cats searchObj.group(2) : smarter
Correspondência versus pesquisa
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 pesquisar verifica se há uma correspondência em qualquer lugar da string (isso é o que o Perl faz por padrão).
Exemplo
Demonstração ao vivo#!/usr/bin/python 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 --> searchObj.group() : dogs
Pesquisar e substituir
Um dos re mais importantes 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 em cadeia com repl , substituindo todas as ocorrências, a menos que max forneceu. Este método retorna a string modificada.
Exemplo
Demonstração ao vivo#!/usr/bin/python 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
Os literais de expressão regular podem incluir um modificador opcional para controlar vários aspectos da correspondência. Os modificadores são especificados como um sinalizador opcional. Você pode fornecer vários modificadores usando OR (|) exclusivo, conforme mostrado anteriormente e pode ser representado por um destes −
Nº Sr. | Modificador e descrição |
---|---|
1 | re.I Executa a correspondência que não diferencia maiúsculas de minúsculas. |
2 | re.L Interpreta palavras de acordo com a localidade atual. Essa interpretação afeta o grupo alfabético (\w e \W), bem como o comportamento do limite 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 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 espaços em branco (exceto dentro de um conjunto [] ou quando escapado por uma barra invertida) e trata o # sem escape como um marcador de comentário. |
Padrões de expressão regular
Exceto para caracteres de controle, (+ ? . * ^ $ ( ) [ ] { } | \) , todos os caracteres correspondem a si mesmos. Você pode escapar de um caractere de controle precedendo-o com uma barra invertida.
A tabela a seguir lista a sintaxe de expressão regular que está disponível em Python −
Nº Sr. | Padrão 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. O uso da opção m permite que ela corresponda à 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 entre 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 entre 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 a 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 não espaços em branco. |
27 | \d Corresponde aos dígitos. Equivalente a [0-9]. |
28 | \D Corresponde a não dígitos. |
29 | \A Corresponde ao início da string. |
30 | \Z Corresponde ao final da string. Se existir 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 a retrocesso (0x08) quando dentro de colchetes. |
34 | \B Corresponde aos limites de não palavras. |
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á corresponder. Caso contrário, refere-se à representação octal de um código de caractere. |
Exemplos de expressões regulares
Caracteres literais
Nº Sr. | Exemplo e descrição |
---|---|
1 | python Corresponder a "python". |
Classes de personagens
Nº Sr. | Exemplo e descrição |
---|---|
1 | [Pp]ython Corresponder a "Python" ou "python" |
2 | esfregue[sim] Combine "ruby" ou "rube" |
3 | [aeiou] Corresponder a qualquer vogal minúscula |
4 | [0-9] Combine 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] Corresponde a qualquer um dos itens acima |
8 | [^aeiou] Corresponder a qualquer coisa que não seja uma vogal minúscula |
9 | [^0-9] Corresponder a qualquer coisa que não seja um dígito |
Aulas de caracteres especiais
Nº Sr. | Exemplo e descrição |
---|---|
1 | . Corresponde a qualquer caractere, exceto nova linha |
2 | \d Corresponder a um dígito:[0-9] |
3 | \D Corresponder a um não dígito:[^0-9] |
4 | \s Corresponder a um caractere de espaço em branco:[ \t\r\n\f] |
5 | \S Corresponder a não-espaço em branco:[^ \t\r\n\f] |
6 | \w Corresponder a um único caractere de palavra:[A-Za-z0-9_] |
7 | \W Corresponder a um caractere não-palavra:[^A-Za-z0-9_] |
Casos de repetição
Nº Sr. | Exemplo e descrição |
---|---|
1 | rubi? Combine "rub" ou "ruby":o y é opcional |
2 | rubi* Corresponder a "esfregar" mais 0 ou mais ys |
3 | rubi+ Corresponder a "esfregar" mais 1 ou mais ys |
4 | \d{3} Corresponder exatamente a 3 dígitos |
5 | \d{3,} Corresponder a 3 ou mais dígitos |
6 | \d{3,5} Corresponder a 3, 4 ou 5 dígitos |
Repetição não gananciosa
Isso corresponde ao menor número de repetições -
Nº Sr. | Exemplo e descrição |
---|---|
1 | <.*> Repetição gananciosa:corresponde a " |
2 | <.*?> Não ganancioso:corresponde a " |
Agrupamento com parênteses
Nº Sr. | Exemplo e descrição |
---|---|
1 | \D\d+ Sem grupo:+ repete \d |
2 | (\D\d)+ Agrupado:+ repete o par \D\d |
3 | ([Pp]ython(, )?)+ Combine "Python", "Python, python, python", etc. |
Referências anteriores
Isso corresponde a um grupo combinado anteriormente novamente -
Nº Sr. | Exemplo e descrição |
---|---|
1 | ([Pp])ython&\1ails Combine python&pails ou Python&pails |
2 | (['"])[^\1]*\1 String com aspas simples ou duplas. \1 corresponde a qualquer que seja o 1º grupo correspondente. \2 corresponde ao que o 2º grupo correspondeu, etc. |
Alternativas
Nº Sr. | Exemplo e descrição |
---|---|
1 | python|perl Combine "python" ou "perl" |
2 | rub(y|le)) Combine "rubi" ou "rublo" |
3 | Python(!+|\?) "Python" seguido por um ou mais ! ou um? |
Âncoras
Isso precisa especificar a posição da partida.
Nº Sr. | Exemplo e descrição |
---|---|
1 | ^Python Corresponde a "Python" no início de uma string ou linha interna |
2 | Python$ Combine "Python" no final de uma string ou linha |
3 | \APython Combine "Python" no início de uma string |
4 | Python\Z Combine "Python" no final de uma string |
5 | \bPython\b Corresponder a "Python" em um limite de palavra |
6 | \brub\B \B é o limite de não-palavra:combine "rub" em "rube" e "ruby", mas não sozinho |
7 | Python(?=!) Corresponder 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
Nº Sr. | Exemplo e descrição |
---|---|
1 | R(?#comentário) Corresponde a "R". Todo o resto é um comentário |
2 | R(?i)uby Não diferencia maiúsculas de minúsculas ao corresponder a "uby" |
3 | R(?i:uby) O mesmo que acima |
4 | rub(?:y|le)) Agrupe apenas sem criar \1 backreference |
python