代码之家  ›  专栏  ›  技术社区  ›  MikeRand

Python:格式化同时使用“%”和“{”作为字符的regex字符串的字符串

  •  5
  • MikeRand  · 技术社区  · 14 年前

    我有下面的正则表达式,它允许我使用re.split分析诸如“20%+”、“20%”或“20%-50%”之类的百分比。

    '([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
    

    我无法让转义字符在regex中工作。有什么办法吗?

    谢谢,

    迈克

    1 回复  |  直到 14 年前
        1
  •  10
  •   Ray    14 年前

    你可以用 %% 要使用旧样式格式插入百分号,请执行以下操作:

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

    同样,对于新样式的格式,将大括号加倍:

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