Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> python

Expressões Regulares em Python: Guia Prático

Uma expressão regular é uma sequência especial de caracteres que ajuda você a corresponder ou encontrar outras strings ou conjuntos de strings, usando uma sintaxe especializada mantida em um padrão. Expressões regulares são amplamente usadas no mundo UNIX.

O módulo Python re fornece suporte completo para expressões regulares estilo Perl no Python. O módulo re levanta a exceção re.error se ocorrer um erro durante a compilação ou uso de uma expressão regular.

Cobriremos duas funções importantes, que serão usadas para lidar com expressões regulares. Mas primeiro uma pequena coisa: Existem vários caracteres que teriam significado especial quando usados em expressão regular. Para evitar qualquer confusão ao lidar com expressões regulares, usaremos Raw Strings como r'expression'.

A Função match

Esta função tenta corresponder o padrão RE pattern à string com flags opcionais.

Aqui está a sintaxe para esta função:

re.match(pattern, string, flags=0)

Descrição dos parâmetros:

Nº 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 diferentes flags usando OR bit a bit (|). Estes são modificadores, listados na tabela abaixo.

A função re.match retorna um objeto match em caso de sucesso, None em caso de falha. Usamos group(num) ou groups() função do objeto match para obter a expressão correspondida.

Nº Método do Objeto Match e Descrição
1

group(num=0)

Este método retorna a correspondência inteira (ou subgrupo específico num)

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, produz o seguinte resultado:

matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter

A Função search

Esta função procura a primeira ocorrência do padrão RE pattern dentro de string com flags opcionais.

Aqui está a sintaxe para esta função:

re.search(pattern, string, flags=0)

Descrição dos parâmetros:

Nº 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 diferentes flags usando OR bit a bit (|). Estes são modificadores, listados na tabela abaixo.

A função re.search retorna um objeto match em caso de sucesso, None em caso de falha. Usamos group(num) ou groups() função do objeto match para obter a expressão correspondida.

Nº Métodos do Objeto Match e Descrição
1

group(num=0)

Este método retorna a correspondência inteira (ou subgrupo específico num)

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, produz o seguinte resultado:

searchObj.group() : Cats are smarter than dogs
searchObj.group(1) : Cats
searchObj.group(2) : smarter

Correspondência vs Busca

O Python oferece duas operações primitivas diferentes baseadas em expressões regulares: match verifica correspondência apenas no início da string, enquanto search verifica correspondência em qualquer lugar da string (isso é 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, produz o seguinte resultado:

No match!!
search --> searchObj.group() : dogs

Busca e Substituição

Um dos métodos mais importantes do re que usa expressões regulares é sub.

Sintaxe

re.sub(pattern, repl, string, max=0)

Este método substitui todas as ocorrências do padrão RE pattern em string com repl, substituindo todas as ocorrências a menos que max seja fornecido. Este método retorna a string modificada.

Exemplo

#!/usr/bin/python
import re
phone = "2004-959-559 # This is Phone Number"
# Deleta comentários estilo Python
num = re.sub(r'#.*$', "", phone)
print("Phone Num : ", num)
# Remove qualquer coisa que não seja dígitos
num = re.sub(r'\D', "", phone)
print("Phone Num : ", num)

Quando o código acima é executado, produz o seguinte resultado:

Phone Num : 2004-959-559
Phone Num : 2004959559

Modificadores de Expressão Regular: Flags de Opção

Literais de expressão regular podem incluir um modificador opcional para controlar vários aspectos da correspondência. Os modificadores são especificados como uma flag opcional. Você pode fornecer múltiplos modificadores usando OR exclusivo (|), como mostrado anteriormente e podem ser representados por um destes:

Nº Modificador e Descrição
1

re.I

Realiza correspondência insensível a maiúsculas/minúsculas.

2

re.L

Interpreta palavras de acordo com o locale atual. Esta interpretação afeta o grupo alfabético (\w e \W), bem como comportamento de fronteira de palavra (\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 um ponto (ponto) corresponder a qualquer caractere, incluindo nova linha.

5

re.U

Interpreta letras de acordo com o conjunto de caracteres Unicode. Esta flag afeta o comportamento de \w, \W, \b, \B.

6

re.X

Permite sintaxe de expressão regular "mais bonita". Ignora espaços em branco (exceto dentro de um conjunto [] ou quando escapado por uma barra invertida) e trata # não escapado como 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 um caractere de controle precedendo-o com uma barra invertida.

A tabela a seguir lista a sintaxe de expressão regular disponível no Python:

Nº Padrão e Descrição
1

^

Corresponde ao início da linha.

2

$

Corresponde ao final da linha.

3

.

Corresponde a qualquer caractere único exceto nova linha. Usando a opção m permite que corresponda a nova linha também.

4

[...]

Corresponde a qualquer caractere único entre colchetes.

5

[^...]

Corresponde a qualquer caractere único não entre colchetes.

6

re*

Corresponde a 0 ou mais ocorrências da expressão precedente.

7

re+

Corresponde a 1 ou mais ocorrências da expressão precedente.

8

re?

Corresponde a 0 ou 1 ocorrência da expressão precedente.

9

re{ n}

Corresponde exatamente n número de ocorrências da expressão precedente.

10

re{ n,}

Corresponde a n ou mais ocorrências da expressão precedente.

11

re{ n, m}

Corresponde a pelo menos n e no máximo m ocorrências da expressão precedente.

12

a| b

Corresponde a a ou b.

13

(re)

Agrupa expressões regulares e lembra o texto correspondido.

14

(?imx)

Alterna temporariamente opções i, m ou x dentro de uma expressão regular. Se entre parênteses, apenas essa área é afetada.

15

(?-imx)

Desliga temporariamente opções i, m ou x dentro de uma expressão regular. Se entre parênteses, apenas essa área é afetada.

16

(?: re)

Agrupa expressões regulares sem lembrar o texto correspondido.

17

(?imx: re)

Alterna temporariamente opções i, m ou x dentro de parênteses.

18

(?-imx: re)

Desliga temporariamente opções i, m ou x dentro de parênteses.

19

(?#...)

Comentário.

20

(?= re)

Especifica posição usando um padrão. Não tem alcance.

21

(?! re)

Especifica posição usando negação de padrão. Não tem alcance.

22

(?> re)

Corresponde a padrão independente sem backtracking.

23

\w

Corresponde a caracteres de palavra.

24

\W

Corresponde a não caracteres de palavra.

25

\s

Corresponde a espaços em branco. Equivale a [\t\n\r\f].

26

\S

Corresponde a não espaços em branco.

27

\d

Corresponde a dígitos. Equivale 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 uma nova linha existe, corresponde logo antes da nova linha.

31

\z

Corresponde ao final da string.

32

\G

Corresponde ao ponto onde a última correspondência terminou.

33

\b

Corresponde a fronteiras de palavra quando fora de colchetes. Corresponde a backspace (0x08) quando dentro de colchetes.

34

\B

Corresponde a não fronteiras de palavra.

35

\n, \t, etc.

Corresponde a novas linhas, carriage returns, tabs, etc.

36

\1...\9

Corresponde a n-ésima subexpressão agrupada.

37

\10

Corresponde a n-ésima subexpressão agrupada se já correspondeu. Caso contrário, refere-se à representação octal de um código de caractere.

Exemplos de Expressões Regulares

Caracteres literais

Nº Exemplo e Descrição
1

python

Corresponde a "python".

Classes de caracteres

Nº Exemplo e Descrição
1

[Pp]ython

Corresponde a "Python" ou "python"

2

rub[ye]

Corresponde a "ruby" 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]

Corresponde a qualquer um dos acima

8

[^aeiou]

Corresponde a qualquer coisa exceto vogal minúscula

9

[^0-9]

Corresponde a qualquer coisa exceto dígito

Classes de Caracteres Especiais

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

Corresponde a não espaço em branco: [^ \t\r\n\f]

6

\w

Corresponde a um único caractere de palavra: [A-Za-z0-9_]

7

\W

Corresponde a um não caractere de palavra: [^A-Za-z0-9_]

Casos de Repetição

Nº Exemplo e Descrição
1

ruby?

Corresponde a "rub" ou "ruby": o y é opcional

2

ruby*

Corresponde a "rub" mais 0 ou mais ys

3

ruby+

Corresponde a "rub" mais 1 ou mais ys

4

\d{3}

Corresponde exatamente a 3 dígitos

5

\d{3,}

Corresponde a 3 ou mais dígitos

6

\d{3,5}

Corresponde a 3, 4 ou 5 dígitos

Repetição Não Gulosa

Isso corresponde ao menor número de repetições:

Nº Exemplo e Descrição
1

<.*>

Repetição gulosa: corresponde a "<python>perl>"

2

<.*?>

Não gulosa: corresponde a "<python>" em "<python>perl>"

Agrupamento com Parênteses

Nº Exemplo e Descrição
1

\D\d+

Sem grupo: + repete \d

2

(\D\d)+

Agrupado: + repete par \D\d

3 ([Pp]ython(, )?)+

Corresponde a "Python", "Python, python, python", etc.

Backreferences

Isso corresponde a um grupo previamente correspondido novamente:

Nº Exemplo e Descrição
1

([Pp])ython\1ails

Corresponde a python\1ails ou Python\1ails

2

(['"])[^\1]*\1

String com aspas simples ou duplas. \1 corresponde ao que o 1º grupo correspondeu. \2 corresponde ao que o 2º grupo correspondeu, etc.

Alternativas

Nº Exemplo e Descrição
1

python|perl

Corresponde a "python" ou "perl"

2

rub(y|le)

Corresponde a "ruby" ou "ruble"

3

Python(!+|\?)

"Python" seguido por um ou mais ! ou um ?

Âncoras

Isso precisa especificar posição de correspondência.

Nº 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 uma fronteira de palavra

6

\brub\B

\B é não fronteira de palavra: corresponde a "rub" 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 seguido por um ponto de exclamação.

Sintaxe Especial com Parênteses

Nº Exemplo e Descrição
1

R(?#comment)

Corresponde a "R". Todo o resto é comentário

2

R(?i)uby

Insensível a maiúsculas/minúsculas ao corresponder "uby"

3

R(?i:uby)

Igual ao anterior

4

rub(?:y|le)

Agrupa apenas sem criar backreference \1

python

  1. Dominando Tipos de Dados em Python: Guia Prático
  2. Dominando Operadores em Python: Guia Completo
  3. Dominando a Declaração Pass em Python: Guia Prático
  4. Dominando Argumentos de Funções em Python: Parâmetros Posicionais, Nomeados e Padrão
  5. Dominando Dicionários em Python: Criação, Manipulação e Técnicas Avançadas
  6. Dominando Iteradores em Python: Como Funcionam e Como Criar os Seus
  7. Closures em Python Explicados: Como Funções Aninhadas Capturam Variáveis
  8. Expressões Regulares em Python (Módulo re) – Guia Prático
  9. Dominando datetime do Python: Guia Prático de Datas, Horários e Fusos Horários
  10. Expressões Regulares em Java: Dominando Correspondência de Padrões com java.util.regex