Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用正则表达式在python中正确替换_Python_Regex - Fatal编程技术网

如何使用正则表达式在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' 鉴于我想要:

我有一个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'
鉴于我想要:

'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组(其值由替换模式中的
    \g
    反向引用参考):尽可能多的0+字符,而不是换行符
  • \b
    -单词边界
  • \d+
    -1+位
  • \。
    -一个点
  • \d+
    -1+位

或者,您可以替换上次出现的简单模式
(\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