【发布时间】:2018-06-08 15:51:33
【问题描述】:
在尝试设置详细的正则表达式时:
# set up variables
ankerwords = ['beerdigt','bestattet','begraben','beigesetzt']
# combine the words, five words before/after
rx = re.compile(r'''
(?:\b\w+\W+){5} # five words before
(?:{})
(?:\W+\w+\b){5} # five words thereafter
'''.format("|".join(ankerwords)), re.X)
这会引发错误IndexError: tuple index out of range。
我知道这是因为表达式中的
{5},但是如何绕过它不将字符串分成几个部分,即
'''(?:\b\w+\W+){5}''' + '(?:{})'.format(...)
这更像是一个风格问题,真的。
【问题讨论】:
-
类似:
(?:\b\w+\W+){{5}}或使用旧版%格式 -
@Jan 额外的
{..}转义格式用于替换的{..},并保留正则表达式的额外{..}原样 -
如果您关心的是风格,您也可以使用带双括号的 f 字符串。