1 回答

TA貢獻1876條經(jīng)驗 獲得超6個贊
考慮是否要使用替換文本,您必須在其中放置第 1 組的內(nèi)容并將它們連接到 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'
在您的情況下,您的替換字符串包含動態(tài)內(nèi)容,例如str(v)可以是任何內(nèi)容。如果它恰好以數(shù)字開頭,那么您最終會遇到前面描述的情況,因此您想使用它\g<1>來避免此問題
添加回答
舉報