È necessario prestare attenzione quando si inseriscono stringhe in uno schema di espressione regolare.
Questo perché la stringa può contenere special regexp characters che può causare errori o fornire risultati imprevisti.
Per dare un esempio:
>>> import re
>>> s = 'one*two*three*four*five'
>>> t = '*f'
>>> r = re.compile(r'%s\w+' % t)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/re.py", line 190, in compile
return _compile(pattern, flags)
File "/usr/lib/python2.7/re.py", line 244, in _compile
raise error, v # invalid expression
sre_constants.error: nothing to repeat
Questo fallisce perché la stringa inserita contiene *
, che è un carattere speciale regexp.
Tuttavia, questo problema può essere affrontato utilizzando la funzione re.escape
sulla stringa inserita:
>>> r = re.compile(r'%s\w+' % re.escape(t))
>>> r.findall(s)
['*four', '*five']
In realtà dubito che un'espressione regolare a partire da due stelle e termina con due stelle è uno valido –
Come nota per le risposte, voglio solo aggiungere - è necessario prestare molta attenzione al valore variabile, in quanto potrebbe essere trattato come cose regexp, dando risultati errati dopo l'applicazione di questa espressione regolare. – demalexx
[** Questa domanda **] (http://stackoverflow.com/questions/6930982/variable-inside-python-regex) è simile alla tua. Potrebbe aiutarti. –