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

Mik*_*and 5 python regex

我有以下正则表达式,它允许我使用re.split解析"20%+","20%"或"20% - 50%"等百分比.

'([0-9]{1,3}[%])([+-]?)'
Run Code Online (Sandbox Code Playgroud)

我想使用字符串格式来传递序列标识符(即'+ - ')作为config.py中的参数.

SERIES = '+-'
Run Code Online (Sandbox Code Playgroud)

我试过的两种方法产生了错误.新式格式化会遇到以下错误(由于{m,n}用法):

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

旧式格式有自己的问题(由于'%'字符):

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

我无法在正则表达式中运行转义字符.有关如何做到这一点的任何想法?

谢谢,

麦克风

Ray*_*Ray 10

您可以使用%%旧式格式插入百分号:

'([0-9]{1,3}[%%])([%s]?)' % (config.SERIES)
Run Code Online (Sandbox Code Playgroud)

类似地,对于新式格式,将大括号加倍:

'([0-9]{{1,3}}[%])([{0}]?)'.format(config.SERIES)
Run Code Online (Sandbox Code Playgroud)