Python:格式化同时使用'%'和'{'的正则表达式字符串

5 投票
1 回答
6835 浏览
提问于 2025-04-16 07:10

我有一个正则表达式,可以用来解析像 '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)

撰写回答