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 re
mó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 \S executa a correspondência somente ASCII em vez da correspondência Unicode completa. |
re.DEBUG |
N / D | N / D | Mostra re.DEBUG as 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 \b e \B minúsculas dependente da localidade atual. O re.LOCALE não é compatível com a re.ASCII bandeira. |
re.MUTILINE |
re.M |
?m |
O re.MULTILINE faz 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.DOTALL faz com que o ponto ( . ) corresponda a todos os caracteres, incluindo uma nova linha. |
re.VERBOSE |
re.X |
?x |
O re.VERBOSE sinalizador 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.S
Linguagem 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 P
não está incluída no resultado porque não está no conjunto [a-z]
.
O exemplo a seguir usa o re.INGORECASE
sinalizador:
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.IGNORECASE
sinalizador 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.MULTILINE
sinalizador, 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.DOTALL
sinalizador, .+
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.VERBOSE
sinalizador 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.VERBOSE
sinalizador 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.ASCII
sinalizador, 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.