Resumo : neste tutorial, você aprenderá sobre referências anteriores de regex do Python e como aplicá-las de maneira eficaz.
Introdução às referências anteriores de regex do Python
Referências anteriores como variáveis em Python. As referências anteriores permitem fazer referência a grupos de captura em uma expressão regular .
O seguinte mostra a sintaxe de uma referência anterior:
\N
Linguagem de código: Python ( python )
Alternativamente, você pode usar a seguinte sintaxe:
\g<N>
Linguagem de código: Python ( python )
Nesta sintaxe, N
pode ser 1, 2, 3, etc. que representa o grupo de captura correspondente.
Observe que se \g<0>
refere à correspondência inteira, que tem o mesmo valor que match.group(0)
.
Suponha que você tenha uma string com a palavra duplicada Python
como esta:
s = 'Python Python is awesome'
Linguagem de código: Python ( python )
E você deseja remover a palavra duplicada ( Python
) para que a string resultante seja:
Python is awesome
Linguagem de código: Python ( python )
Para fazer isso, você pode usar uma expressão regular com referência anterior.
Primeiro, combine uma palavra com um ou mais caracteres e um ou mais espaços:
'\w+\s+'
Linguagem de código: Python ( python )
Segundo, crie um grupo de captura que contenha apenas os caracteres da palavra:
'(\w+)\s+'
Linguagem de código: Python ( python )
Terceiro, crie uma referência anterior que faça referência ao primeiro grupo de captura:
'(\w+)\s+\1'
Linguagem de código: Python ( python )
Nesse padrão, \1
é uma referência anterior que faz referência ao \w+
grupo de captura ( ).
Por fim, substitua toda a correspondência pelo primeiro grupo de captura usando a sub()
função do re
módulo:
import re
s = 'Python Python is awesome'
new_s = re.sub(r'(\w+)\s+\1', r'\1', s)
print(new_s)
Linguagem de código: Python ( python )
Saída:
Python is awesome
Linguagem de código: Python ( python )
Mais exemplos de referência anterior de regex Python
Vejamos mais alguns exemplos de uso de referências anteriores.
1) Usando referências anteriores de regex Python para obter texto entre aspas
Suponha que você queira colocar o texto entre aspas duplas:
"This is regex backreference example"
Linguagem de código: Python ( python )
Ou aspas simples:
'This is regex backreference example'
Linguagem de código: Python ( python )
Mas não misturado entre aspas simples e duplas. O seguinte não corresponderá:
'not match"
Linguagem de código: Python ( python )
Para fazer isso, você pode usar o seguinte padrão:
'[\'"](.*?)[\'"]'
Linguagem de código: Python ( python )
No entanto, esse padrão corresponderá ao texto que começa com aspas simples (‘) e termina com aspas duplas (“) ou vice-versa. Por exemplo:
import re
s = '"Python\'s awsome". She said'
pattern = '[\'"].*?[\'"]'
match = re.search(pattern, s)
print(match.group(0))
Linguagem de código: Python ( python )
Ele retorna o "Python'
não "Python's awesome"
:
"Python'
Linguagem de código: Python ( python )
Para corrigir isso, você pode usar uma referência anterior:
r'([\'"]).*?\1'
Linguagem de código: Python ( python )
A referência anterior \1
refere-se ao primeiro grupo de captura. Portanto, se o subgrupo começar com aspas simples, \1
corresponderá à aspas simples. E se o subgrupo começar com aspas duplas, \1
corresponderá às aspas duplas.
Por exemplo:
import re
s = '"Python\'s awsome". She said'
pattern = r'([\'"])(.*?)\1'
match = re.search(pattern, s)
print(match.group())
Linguagem de código: Python ( python )
Saída:
"Python's awsome"
Linguagem de código: Python ( python )
2) Usando referências anteriores de regex Python para encontrar palavras que tenham pelo menos um caractere repetido consecutivo
O exemplo a seguir usa uma referência anterior para encontrar palavras que tenham pelo menos um caractere repetido consecutivamente:
import re
words = ['apple', 'orange', 'strawberry']
pattern = r'\b\w*(\w)\1\w*\b'
results = [w for w in words if re.search(pattern, w)]
print(results)
Linguagem de código: Python ( python )
Saída:
['apple', 'strawberry']
Linguagem de código: Python ( python )
Resumo
- Use uma referência anterior
\N
para fazer referência ao grupo de capturaN
em uma expressão regular.