python - 替换重复字符串但在挂载点
问题描述
我想用某个名称替换挂载点名称,在这种情况下,字符串"/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'
解决方案
只需将字符串的开头匹配到第一个空格字符,然后从替换的子字符串后面的空格开始匹配到结尾:
>>> 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
。
推荐阅读
- azure - 是否可以在 Azure ARM 模板中进行迭代字符串替换?
- python-3.x - 无法连接到 HTTPS URL,因为 SSL 模块不可用
- jenkins - Jenkins 在 CI 机器中构建失败
- php - Laravel 为特定路线设置最大上传大小限制?
- .net-core - 多对多关系仅包含一个实体
- android-webview - 在 WebView 中维护导航历史
- django - ImportError:无法在 django virtualenv 中导入名称 _remove_dead_weakref
- svg - 如何缩放以适合svg中的图像
- charts - 如何为没有数据的 Google 地理图表国家/地区设置颜色透明度?
- ag-grid - 在 ag 网格聚合/行分组中隐藏行数