Python 新手。这可能很简单,但我还没有找到答案。
rndStr = "20101215"
rndStr2 = "20101216"
str = "Looking at dates between 20110316 and 20110317"
outstr = re.sub("(.+)([0-9]{8})(.+)([0-9]{8})",r'\1'+rndStr+r'\2'+rndStr2,str)
我正在寻找的输出是:
Looking at dates between 20101215 and 20101216
但我得到的是:
P101215101216
两个 rndStr 的值并不重要。假设它是随机的或取自用户输入(为了简单起见,我将静态值放在这里)。感谢您的帮助。
最佳答案
您的反向引用不明确。您的替换字符串变为
\120101215\220101216
这是两个要反向引用的相当大的数字:)
要解决它,请使用以下语法:
r'\g<1>'+rndStr+r'\g<2>'+rndStr2
你也有太多的括号(或者“括号”,如果你像我一样说英式英语的话:) - 你不需要在 [0-9]{8}
部分周围加上括号你没有反向引用:
re.sub("(.+)[0-9]{8}(.+)[0-9]{8}",...
应该足够了。
(并且,如其他地方所述,不要将 str
用作变量名。除非您想花很长时间调试为什么 str.replace()
不不再工作了。不是说我曾经那样做过……不。:)
所以整个事情变成了:
import re
rndStr = "20101215"
rndStr2 = "20101216"
s = "Looking at dates between 20110316 and 20110317"
outstr = re.sub("(.+)[0-9]{8}(.+)[0-9]{8}", r'\g<1>'+rndStr+r'\g<2>'+rndStr2, s)
print outstr
制作:
Looking at dates between 20101215 and 20101216
关于python - 如何在 Python 中使用匹配的组和变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5331985/