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