Grupo Python Regex sem captura

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 Xdentro da correspondência para que você possa acessá-la através do group()método do Matchobjeto.

À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
10Linguagem 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
10Linguagem 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
10Linguagem 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
10Linguagem 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.

Deixe um comentário

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