Resumo : neste tutorial, você aprenderá sobre o grupo de não captura de regex do Python para criar um grupo, mas não deseja armazená-lo nos grupos da partida.
Introdução ao grupo de não captura de regex Python
As expressões regulares têm dois tipos de grupos:
- Capturando grupos
- Grupos sem captura
Até agora, você aprendeu como usar um grupo de captura para extrair informações de uma correspondência maior ou refazer a correspondência do grupo correspondente anterior usando uma referência anterior .
Para fazer isso, você cria um grupo de captura, coloca um padrão (ou uma regra) entre parênteses, por exemplo:
(X)
Linguagem de código: Python ( python )
Esta sintaxe captura qualquer correspondência X
dentro da correspondência para que você possa acessá-la através do group()
método do Match
objeto.
Às vezes, você pode querer criar um grupo, mas não quer capturá-lo nos grupos da partida. Para fazer isso, você pode usar um grupo sem captura com a seguinte sintaxe:
(?:X)
Linguagem de código: Python ( python )
Exemplo de grupo sem captura do Python Regex
O exemplo a seguir ilustra como usar os grupos de captura para capturar as versões principais e secundárias do Python na string"Python 3.10"
import re
s = 'Python 3.10'
pattern = '(\d+)\.(\d+)'
match = re.search(pattern, s)
# show the whole match
print(match.group())
# show the groups
for group in match.groups():
print(group)
Linguagem de código: Python ( python )
Saída:
3.10
3
10
Linguagem de código: Python ( python )
O padrão a seguir corresponde a um ou mais dígitos seguidos pela string literal (.) e um ou mais dígitos:
(\d+)\.(\d+)
Linguagem de código: Python ( python )
Possui dois grupos de captura. Eles capturam os dígitos antes e depois do literal (.):
3
10
Linguagem de código: Python ( python )
Suponha que você não queira capturar os dígitos antes do caractere literal (.), você pode usar um grupo sem captura como este:
import re
s = 'Python 3.10'
pattern = '(?:\d+)\.(\d+)'
match = re.search(pattern, s)
# show the whole match
print(match.group())
# show the groups
for group in match.groups():
print(group)
Linguagem de código: Python ( python )
Saída:
3.10
10
Linguagem de código: Python ( python )
Neste exemplo, usamos o grupo de não captura para o primeiro grupo:
(?:\d+)
Linguagem de código: Python ( python )
Para capturar apenas a versão secundária, você pode ignorar o grupo que não foi capturado da seguinte maneira:
import re
s = 'Python 3.10'
pattern = '\d+\.(\d+)'
match = re.search(pattern, s)
# show the whole match
print(match.group())
# show the groups
for group in match.groups():
print(group)
Linguagem de código: Python ( python )
Saída:
3.10
10
Linguagem de código: Python ( python )
Então, por que você usa o grupo de não captura? o motivo para usar o grupo sem captura é economizar memória, pois o mecanismo regex não precisa armazenar os grupos no buffer.
Resumo
- Use o grupo de não captura de regex para criar um grupo, mas não salve-o nos grupos da partida.