certo...
Incollo la risposto di un utente di un forum di python:
Danno tutti lo stesso risultato:
leggi sorgentecopia negli appuntistampa?
- >>> import re
- >>> re.sub(r'(.*)', r'1', 'Prova')
- '1'
- >>> re.sub('(.*)', '1', 'Prova')
- '1'
- >>> re.sub(r'' + '(.*)', r'' + '1', 'Prova')
- '1'
Probabilmente hai ridotto il tuo problema a un esempio minimale che però non lo riproduce più. Credo che il tuo problema sia invece che matches['a'] contiene dei backslash. Allora le due forme non sono equivalenti. Infatti non esiste un tipo di stringa "raw" diverso da str. Quando scrivi
leggi sorgentecopia negli appuntistampa?
- r'' + matches['a']
non stai convertendo la tua stringa a una stringa "raw", perché è già una stringa e tale rimane. Osserva la differenza:
leggi sorgentecopia negli appuntistampa?
- >>> print('a\tb')
- a b
- >>> print('a\\tb')
- a\tb
- >>> print(r'a\tb')
- a\tb
- >>> print(r'' + 'a\tb')
- a b
- >>> print(r'' + 'a\\tb')
- a\tb
- >>> print(r'' + r'a\tb')
- a\tb
- >>> print('' + r'a\tb')
- a\tb
- >>> print('' + 'a\\tb')
- a\tb
- >>> print('' + 'a\tb')
- a b