我有一些VMware服务器工具,可以从我们的VMware服务器返回它托管的所有虚拟机的字符串。我使用的是Ruby,并且需要获取所有的主机名,然而,当我这样做时,字符串看起来像这样:
=>"/vmfs/volumes/d9a12362-2cc7sfe/server1/server1.vmx"是否有正则表达式将字符串替换为最后一个"/“和".vmx”之间的内容?
发布于 2015-08-25 03:30:24
有两个很好的方法可以解决这个问题。
string = "/vmfs/volumes/d9a12362-2cc7sfe/server1/server1.vmx"
File.extname(string) # => '.vmx'
File.basename(string, File.extname(string)) # => "server1"发布于 2015-08-25 03:38:30
如果您想使用regex,可以使用gsub或sub来实现
s = '=>"/vmfs/volumes/d9a12362-2cc7sfe/server1/server1.vmx"'
result = s.gsub(/(?mi)(=>".+\/)(.+)(\.vmx")/, '\1new\3')结果
=>"/vmfs/volumes/d9a12362-2cc7sfe/server1/new.vmx"发布于 2015-08-25 03:40:58
我不会担心使用正则表达式。Ruby有一些方法可以让这一切变得简单:
path = "/vmfs/volumes/d9a12362-2cc7sfe/server1/server1.vmx"
dir, basename = File.split(path)
File.join(dir, 'foo' + File.extname(basename))
# => "/vmfs/volumes/d9a12362-2cc7sfe/server1/foo.vmx"正则表达式很强大,但这种强大是有代价的:
不过,你的问题并不完全清楚:
...replace字符串的最后一个"/“和".vmx”之间的是什么?
这可能意味着您希望将整个路径替换为基本名称减去扩展名:
path = File.basename(path, File.extname(path))
# => "server1"https://stackoverflow.com/questions/32190192
复制相似问题