Sinalizadores Regex Python

Resumo : neste tutorial, você aprenderá sobre os sinalizadores regex do Python e como eles alteram o comportamento do mecanismo regex para correspondência de padrões.

Introdução aos sinalizadores regex do Python

As funções de expressão regular como findall , finditer , search , match , split , sub ,… possuem o parâmetro ( flags) que aceita um ou mais sinalizadores regex.

Desde o Python 3.6, os sinalizadores regex são instâncias da classe RegexFlag de enumeração no remódulo. A tabela a seguir mostra os sinalizadores regex disponíveis e seus significados:

Bandeira Alias Sinalizador embutido Significado
re.ASCII re.A ?m O re.ASCIIé relevante apenas para os padrões de bytes. Ele faz \w, \W, \b, \B, \d, \D e \Sexecuta a correspondência somente ASCII em vez da correspondência Unicode completa.
re.DEBUG N / D N / D Mostra re.DEBUGas informações de depuração do padrão compilado.
re.IGNORECASE re.I ?i realizar correspondência sem distinção entre maiúsculas e minúsculas. Isso significa que [A-Z]também corresponderá a letras minúsculas.
re.LOCALE re.L ?L O re.LOCALEé relevante apenas para o padrão de bytes. Isso torna a correspondência \w, \W, e com distinção entre maiúsculas \be \Bminúsculas dependente da localidade atual. O re.LOCALEnão é compatível com a re.ASCIIbandeira.
re.MUTILINE re.M ?m O re.MULTILINEfaz as ^correspondências no início de uma string e no início de cada linha e $as correspondências no final de uma string e no final de cada linha.
re.DOTALL re.S ?s Por padrão, o ponto ( .) corresponde a qualquer caractere, exceto uma nova linha. Isso re.DOTALLfaz com que o ponto ( .) corresponda a todos os caracteres, incluindo uma nova linha.
re.VERBOSE re.X ?x O re.VERBOSEsinalizador permite organizar visualmente um padrão em seções lógicas e adicionar comentários.

Para combinar dois ou mais sinalizadores, você usa o |operador assim:

re. A | re.M | re.SLinguagem de código:  Python  ( python )

Sinalizadores de regex Python

Vejamos alguns exemplos de uso dos sinalizadores regex do Python.

1) O exemplo do sinalizador re.IGNORECASE

O exemplo a seguir usa a findall()função para corresponder todos os caracteres minúsculos do conjunto [a-z]em uma string:

import re

s = 'Python is awesome'
pattern = '[a-z]+'

l = re.findall(pattern, s)
print(l)Linguagem de código:  Python  ( python )

Saída:

['ython', 'is', 'awesome']Linguagem de código:  Python  ( python )

Observe que a letra Pnão está incluída no resultado porque não está no conjunto [a-z].

O exemplo a seguir usa o re.INGORECASEsinalizador:

import re

s = 'Python is awesome'
pattern = '[a-z]+'

l = re.findall(pattern, s, re.IGNORECASE)
print(l)Linguagem de código:  Python  ( python )

Saída:

['Python', 'is', 'awesome']Linguagem de código:  Python  ( python )

Mesmo que o padrão corresponda apenas aos caracteres do set [a-z], o re.IGNORECASEsinalizador instrui o mecanismo regex a também corresponder aos caracteres do [A-Z]set.

2) O exemplo do sinalizador re.MULTILINE

O exemplo a seguir usa a âncora ^ para corresponder a um ou mais caracteres de palavra no início de uma string:

import re

s = '''Regex 
Flags'''

pattern ='^\w+'

l = re.findall(pattern,s)
print(l)Linguagem de código:  Python  ( python )

Saída:

['Regex']Linguagem de código:  Python  ( python )

A string s tem duas linhas. A ^única correspondência no início da string conforme o esperado.

Se você usar o re.MULTILINEsinalizador, ele ^corresponderá no início de cada linha. Por exemplo:

import re

s = '''Regex 
Flags'''

pattern = '^\w+'

l = re.findall(pattern, s, re.MULTILINE)
print(l)Linguagem de código:  Python  ( python )

Saída:

['Regex', 'Flags']Linguagem de código:  Python  ( python )

3) O exemplo do sinalizador re.DOTALL

Neste exemplo, o .+padrão de pontos corresponde a um ou mais caracteres, exceto a nova linha:

import re

s = '''Regex
Flags'''

pattern = '.+'

l = re.findall(pattern, s)
print(l)Linguagem de código:  Python  ( python )

Saída:

['Regex', 'Flags']Linguagem de código:  Python  ( python )

Se você usar o re.DOTALLsinalizador, .+também corresponderá à nova linha:

import re

s = '''Regex
Flags'''

pattern = '.+'

l = re.findall(pattern, s, re.DOTALL)
print(l)Linguagem de código:  Python  ( python )

Saída:

['Regex\nFlags']Linguagem de código:  Python  ( python )

4) O exemplo do sinalizador re.VERBOSE

O exemplo a seguir mostra como usar o re.VERBOSEsinalizador para escrever um padrão em seções com comentários:

import re

s = 'Python 3'

pattern = r'''^(\w+) # match one or more characters at the beginning of the string
               \s*   # match zero or more spaces
              (\d+)$ # match one or more digits at the end of the string'''

l = re.findall(pattern, s, re.VERBOSE)
print(l)Linguagem de código:  Python  ( python )

Saída:

[('Python', '3')]Linguagem de código:  Python  ( python )

Neste exemplo, o re.VERBOSEsinalizador nos permite adicionar espaços e comentários à expressão regular para explicar cada regra individual.

5) O exemplo do sinalizador re.ASCII

O exemplo a seguir corresponde a palavras com dois caracteres:

import re

s = '作法 is Pythonic in Japanese'
pattern = r'\b\w{2}\b'

l = re.findall(pattern, s)
print(l)Linguagem de código:  Python  ( python )

Saída:

['作法', 'is', 'in']Linguagem de código:  Python  ( python )

No entanto, se você usar o re.ASCIIsinalizador, as correspondências conterão apenas caracteres ASCII:

import re

s = '作法 is Pythonic in Japanese'
pattern = r'\b\w{2}\b'

l = re.findall(pattern, s, re.ASCII)
print(l)Linguagem de código:  Python  ( python )

Saída:

['is', 'in']Linguagem de código:  Python  ( python )

Neste exemplo, a palavra 作法foi excluída da lista resultante.

Resumo

  • Os sinalizadores regex do Python são instâncias da classe de enumeração RegexFlag.
  • Os sinalizadores regex alteram a maneira como o mecanismo regex executa a correspondência de padrões.
  • As funções regex como match, fullmatch, findall, finditer, search, split, sub, subn aceitam um parâmetro flags que pode ser um sinalizador, uma combinação de sinalizadores regex.
  • Use o | operador para combinar dois sinalizadores regex.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *