1 回答
TA贡献1876条经验 获得超6个赞
考虑是否要使用替换文本,您必须在其中放置第 1 组的内容并将它们连接到 string 2。您可以编写r'\12',但这不会起作用,因为正则表达式解析器会认为您引用的是组12而不是1字符串后面的组2!
>>> re.sub(r'(he)llo', r'\12', 'hello')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/re.py", line 191, in sub
return _compile(pattern, flags).sub(repl, string, count)
File "/usr/lib/python3.6/re.py", line 326, in _subx
template = _compile_repl(template, pattern)
File "/usr/lib/python3.6/re.py", line 317, in _compile_repl
return sre_parse.parse_template(repl, pattern)
File "/usr/lib/python3.6/sre_parse.py", line 943, in parse_template
addgroup(int(this[1:]), len(this) - 1)
File "/usr/lib/python3.6/sre_parse.py", line 887, in addgroup
raise s.error("invalid group reference %d" % index, pos)
sre_constants.error: invalid group reference 12 at position 1
您可以使用\g<1>引用组的语法来解决此问题r'\g<1>2'::
>>> re.sub(r'(he)llo', r'\g<1>2', 'hello')
'he2'
在您的情况下,您的替换字符串包含动态内容,例如str(v)可以是任何内容。如果它恰好以数字开头,那么您最终会遇到前面描述的情况,因此您想使用它\g<1>来避免此问题
添加回答
举报