Python - expressões regulares

Uma expressão regular é uma sequência especial de caracteres que 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 Python refornece suporte completo para expressões regulares semelhantes a Perl em Python. O módulo re levanta a exceção re.error se ocorrer um erro durante a compilação ou o uso de 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 comor'expression'.

A função de correspondência

Esta função tenta corresponder o padrão RE à 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/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 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étodos 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/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

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/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 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/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

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 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. 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. 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 sem 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á 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?

Combine "esfregar" ou "rubi": 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 nongreedy

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 2º 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