如何使用正则表达式在python中正确替换
我有一个python字符串:如何使用正则表达式在python中正确替换,python,regex,Python,Regex,我有一个python字符串: s = 'filename 13.00 50850.8732503344475 37.11 abc' 为了找到格式为nn.nn的第二个字符串,我知道我可以: re.findall(r'.*(\b\d+\.\d+)',s)[0] 其中发现: '37.11' 但是我想用99.99来代替它 我试过: re.sub(r'.*(\b\d+\.\d+)','99.99',s) 但这只会产生: '99.99 abc' 鉴于我想要:
s = 'filename 13.00 50850.8732503344475 37.11 abc'
为了找到格式为nn.nn
的第二个字符串,我知道我可以:
re.findall(r'.*(\b\d+\.\d+)',s)[0]
其中发现:
'37.11'
但是我想用99.99来代替它
我试过:
re.sub(r'.*(\b\d+\.\d+)','99.99',s)
但这只会产生:
'99.99 abc'
鉴于我想要:
'filename 13.00 50850.8732503344475 99.99 abc'
显然,我还不明白正则表达式是如何工作的。有人能帮忙吗 您应该捕获需要保留的内容,并在替换模式中使用明确的Replamement backreference:
s = re.sub(r'(.*)\b\d+\.\d+',r'\g<1>99.99', s)
s=re.sub(r'(.*)\b\d+\.\d+',r'\g99.99',s)
请参阅和
图案细节
-第1组(其值由替换模式中的(.*)
反向引用参考):尽可能多的0+字符,而不是换行符\g
-单词边界\b
-1+位\d+
-一个点\。
-1+位\d+
(\d+\.\d+)
:
快一点。timeit基准测试()的结果:
s = "filename 13.00 50850.8732503344475 37.11 abc"
*_, last = re.finditer(r"(\d+\.\d+)", s)
s = s[:last.start()] + "99.99" + s[last.end():]
re.finditer() -> 11.30306268
re.sub() -> 15.613837582000002