Python 3,正则表达式重复和str.format() - 什么是正确的方法?

时间:2012-07-01 21:52:58

标签: regex string python-3.x format repeat

我想根据变量的值进行regexp搜索。

在Py2.x中,这非常有效:

pattern = re.compile(r"\b[a-zA-Z]{%(min_length)d,}\b" % locals())

当我尝试将其移植到新的str.format()表示法时,我会得到类似的结果:

pattern = re.compile(r"\b[a-zA-Z]{{0},}\b".format(min_length))

这给了我一个错误,因为重复的大括号与来自str.format()的大括号混淆:

ValueError: Single '}' encountered in format string

我确信你可以想到更多像这样的例子,其中format()与重复发生冲突。

通过str.format()为regexp的重复提供外部值的正确方法是什么? %运算符在Py3中不起作用。

1 个答案:

答案 0 :(得分:3)

只需使用旧版本 - Python 3.x仍支持%字符串格式,它不会消失。如果您坚持使用新语法,请将未指示字段的大括号加倍:

pattern = re.compile(r"\b[a-zA-Z]{{{0},}}\b".format(min_length))