Python 直接在反向引用之后的数值

Python 直接在反向引用之后的数值,python,regex,Python,Regex,我试图在一个字符串上使用re.sub,该字符串的数值直接位于数值反引用之后。也就是说,如果我的替换值是15.00,而我的反向引用是\1,那么我的替换字符串将如下所示: \115.00,它将抛出一个错误:无效的组引用,因为它认为我的反向引用组是115 例如: import re r = re.compile("(Value:)([-+]?[0-9]*\.?[0-9]+)") to_replace = "Value:0.99" # Want Value:1.00 # Won't work: p

我试图在一个字符串上使用
re.sub
,该字符串的数值直接位于数值反引用之后。也就是说,如果我的替换值是
15.00
,而我的反向引用是
\1
,那么我的替换字符串将如下所示:

\115.00
,它将抛出一个
错误:无效的组引用
,因为它认为我的反向引用组是
115

例如:

import re

r = re.compile("(Value:)([-+]?[0-9]*\.?[0-9]+)")

to_replace = "Value:0.99" # Want Value:1.00

# Won't work:
print re.sub(r, r'\11.00', to_replace)

# Will work, but don't want the space
print re.sub(r, r'\1 1.00', to_replace)

是否有一种解决方案只涉及
re.sub

使用明确的反向引用语法
\g
。见参考资料:

\g
使用相应的组号<因此,code>\g相当于
\2
,但在诸如
\g0
之类的替换中并不含糊<代码>\20将被解释为对组
20
的引用,而不是对组2后跟文字字符“0”的引用

:

重新导入
r=重新编译(((值:)([-+]?[0-9]*\.?[0-9]+))
to_replace=“Value:0.99”#需要值:1.00
打印(重新编号(r,r'\g1.00',以替换))
#=>值:1.00

谢谢!我想一定有更精确的反向引用语法,但不知道是哪种。谢谢,但请注意,
\g
语法只在
re.sub
repl
参数中起作用,正如文档所说!我必须明确地引用搜索模式本身中的反向引用。解决方案是使用命名组:
r”(?P[1-9])0\d(?P=x)0\d“
,它将组捕获为名称“x”,然后查找该值的重复。字符串的第一部分是捕获,第二部分是重用。@MitchmcBers The
(?P=x)
是在正则表达式模式中使用的内联反向引用,而这个答案和问题是关于在替换模式中使用的替换反向引用。@WiktorStribiżew Yeah,但是我添加了我的评论,因为这是第一个关于如何在反向引用后添加数字的谷歌结果。现在,这两种类型的访问者都会找到他们进行反向引用所需的技巧!:)@Mitchmcabers我怀疑它会帮助很多访问者,这个问题被标记为一个重复的问题,并且会自动重定向给那些不太喜欢原始问题的用户。
import re
r = re.compile("(Value:)([-+]?[0-9]*\.?[0-9]+)")
to_replace = "Value:0.99" # Want Value:1.00
print(re.sub(r, r'\g<1>1.00', to_replace))
# => Value:1.00