Python:格式化同时使用'%'和'{'的正则表达式字符串
我有一个正则表达式,可以用来解析像 '20%+'、'20%' 或 '20% - 50%' 这样的百分比,使用的是 re.split 方法。
'([0-9]{1,3}[%])([+-]?)'
我想用字符串格式化的方法,从 config.py 文件中传递系列标识符(比如 '+-')作为参数。
SERIES = '+-'
我尝试的两种方法都出现了错误。新式格式化遇到了一个错误(是因为使用了 {m,n} 的格式):
>>> import config
>>> regex = '([0-9]{1,3}[%])([{0}]?)'.format(config.SERIES)
KeyError: '1,3'
旧式格式化也有自己的问题(是因为 '%' 字符):
>>> import config
>>> regex = '([0-9]{1,3}[%])([%s]?)' % (config.SERIES)
unsupported format character ']' (0x5d) at index 14
我一直没能在正则表达式中正确使用转义字符。有没有什么好的方法可以解决这个问题?
谢谢,
迈克
1 个回答
12
你可以用 %%
来插入一个百分号,这种方法是旧式的格式化方式:
'([0-9]{1,3}[%%])([%s]?)' % (config.SERIES)
而对于新式的格式化方式,你需要把大括号加倍:
'([0-9]{{1,3}}[%])([{0}]?)'.format(config.SERIES)