2010-11-16 29 views
5

Ho la seguente espressione regolare, che mi consente di analizzare percentuali come '20% + ', '20%' o '20% - 50% 'usando re.split.Python: Stringa che formatta una stringa regolare che utilizza sia '%' sia '{' come caratteri

'([0-9]{1,3}[%])([+-]?)' 

voglio usare la formattazione delle stringhe per passare gli identificativi della serie (vale a dire '+ -') come un argomento da config.py.

SERIES = '+-' 

I due metodi che ho provato hanno prodotto errori. formattazione nuovo stile corre in seguente errore (dovuto alla {m, n} utilizzo):

>>> import config 
>>> regex = '([0-9]{1,3}[%])([{0}]?)'.format(config.SERIES) 
KeyError: '1,3' 

formattazione vecchio stile ha i suoi problemi (a causa del carattere '%'):

>>> import config 
>>> regex = '([0-9]{1,3}[%])([%s]?)' % (config.SERIES) 
unsupported format character ']' (0x5d) at index 14 

Non sono stato in grado di ottenere caratteri di escape che funzionano all'interno della regex. Qualche idea su come si fa?

Grazie,

Mike

risposta

10

È possibile utilizzare %% per inserire un segno per cento utilizzando la formattazione vecchio stile:

'([0-9]{1,3}[%%])([%s]?)' % (config.SERIES) 

Allo stesso modo per la formattazione di nuovo stile, il doppio delle parentesi graffe :

'([0-9]{{1,3}}[%])([{0}]?)'.format(config.SERIES) 
Problemi correlati