首页 > 解决方案 > 替换重复字符串但在挂载点

问题描述

我想用某个名称替换挂载点名称,在这种情况下,字符串"/filesystem"是重复的,所以我的 re.sub 在两次出现时都被替换但是我只想在挂载位置替换,在这种情况下是在第二个位置,请问我该如何解决?

re.sub(r"/filesystem", "/Abhimanyu" , "server1.abc.com:/export/admin_01/filesystem /filesystem nfs rw,bg,rsize=1048576,wsize=1048576,vers=3,timeo=600,noacl 0 0")

In [53]: re.sub(r"/filesystem", "/Abhimanyu" , "server1.abc.com:/export/admin_01/filesystem /filesystem nfs rw,bg,rsize=1048576,wsize=1048576,vers=3,timeo=600,noacl 0 0")
Out[53]: 'server1.abc.com:/export/admin_01/Abhimanyu /Abhimanyu nfs rw,bg,rsize=1048576,wsize=1048576,vers=3,timeo=600,noacl 0 0'

标签: pythonpython-3.x

解决方案


只需将字符串的开头匹配到第一个空格字符,然后从替换的子字符串后面的空格开始匹配到结尾:

>>> re.sub(r"^(\S+\s)/filesystem(\s.*$)", r"\1/Abhimanyu\2", "server1.abc.com:/export/admin_01/filesystem /filesystem nfs rw,bg,rsize=1048576,wsize=1048576,vers=3,timeo=600,noacl 0 0")
'server1.abc.com:/export/admin_01/filesystem /Abhimanyu nfs rw,bg,rsize=1048576,wsize=1048576,vers=3,timeo=600,noacl 0 0'
  • ^匹配字符串的开头
  • \s\S分别匹配空白和非空白字符
  • $匹配字符串结尾
  • .*匹配零个或多个 ( *) 任何字符 ( .)
  • ( )将可在替换字符串中使用的组标记为\1\2

推荐阅读