我怎么能代替foobar用foo123bar?这不起作用:>>> re.sub(r'(foo)', r'\1123', 'foobar')'J3bar'这有效:>>> re.sub(r'(foo)', r'\1hi', 'foobar')'foohibar'我认为这是一个常见的问题\number。任何人都可以给我一个如何处理这个问题的提示吗?
2 回答
精慕HU
TA贡献1845条经验 获得超8个赞
答案是:
re.sub(r'(foo)', r'\g<1>123', 'foobar')
文档的相关摘录:
除了如上所述的字符转义和反向引用之外,\ g还将使用由名为name的组匹配的子字符串,由(?P ...)语法定义。\ g使用相应的组号; 因此,\ g 2等于\ 2,但在诸如\ g 2的替换中不是模糊的。\ 20将被解释为对组20的引用,而不是对组2的引用,后跟文字字符“0”。反向引用\ g <0>替换RE匹配的整个子字符串。
有只小跳蛙
TA贡献1824条经验 获得超8个赞
你的问题是r'\ 112'被解释为八进制文字0112,ASCII'J'或十进制74.无法看到如何强制反向引用'\ 1'在字符串连接之前得到评估或''.join()
添加回答
举报
0/150
提交
取消