我有一些VMware服务器工具可以从我们托管的所有虚拟机的VMware服务器返回一个字符串。我使用Ruby并且需要获取所有主机名,但是,当我这样做时,字符串看起来像这样:
=>"/vmfs/volumes/d9a12362-2cc7sfe/server1/server1.vmx"
是否有正则表达式将字符串替换为最后一个“/”和“.vmx”之间的内容?
答案 0 :(得分:3)
有两种甜蜜的方法。
string = "/vmfs/volumes/d9a12362-2cc7sfe/server1/server1.vmx"
File.extname(string) # => '.vmx'
File.basename(string, File.extname(string)) # => "server1"
答案 1 :(得分:0)
如果您想使用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"
答案 2 :(得分:0)
我不担心使用正则表达式。 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"
正则表达式很强大,但这种力量是有代价的:
但你的问题并不完全清楚:
...用最后一个&#34; /&#34;之间的内容替换字符串和&#34; .vmx&#34;?
可能意味着您要使用basename减去扩展名替换整个路径:
path = File.basename(path, File.extname(path))
# => "server1"
答案 3 :(得分:0)
你可以这样做:
string = "/vmfs/volumes/d9a12362-2cc7sfe/server1/server1.vmx"
new_string = string.split("/")[-1].gsub(".vmx","")
这样你就不需要使用正则表达式
了