首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要在Ruby中使用regex从路径中获取服务器名称

需要在Ruby中使用regex从路径中获取服务器名称
EN

Stack Overflow用户
提问于 2015-08-25 03:28:23
回答 4查看 65关注 0票数 0

我有一些VMware服务器工具,可以从我们的VMware服务器返回它托管的所有虚拟机的字符串。我使用的是Ruby,并且需要获取所有的主机名,然而,当我这样做时,字符串看起来像这样:

代码语言:javascript
复制
=>"/vmfs/volumes/d9a12362-2cc7sfe/server1/server1.vmx"

是否有正则表达式将字符串替换为最后一个"/“和".vmx”之间的内容?

EN

回答 4

Stack Overflow用户

发布于 2015-08-25 03:30:24

有两个很好的方法可以解决这个问题。

代码语言:javascript
复制
string = "/vmfs/volumes/d9a12362-2cc7sfe/server1/server1.vmx"
File.extname(string) # => '.vmx'
File.basename(string, File.extname(string)) # => "server1"
票数 3
EN

Stack Overflow用户

发布于 2015-08-25 03:38:30

如果您想使用regex,可以使用gsubsub来实现

代码语言:javascript
复制
s = '=>"/vmfs/volumes/d9a12362-2cc7sfe/server1/server1.vmx"'
result = s.gsub(/(?mi)(=>".+\/)(.+)(\.vmx")/, '\1new\3')

结果

代码语言:javascript
复制
=>"/vmfs/volumes/d9a12362-2cc7sfe/server1/new.vmx"
票数 0
EN

Stack Overflow用户

发布于 2015-08-25 03:40:58

我不会担心使用正则表达式。Ruby有一些方法可以让这一切变得简单:

代码语言:javascript
复制
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"

正则表达式很强大,但这种强大是有代价的:

  • 它们可能很难维护,特别是当它们变得更加复杂时。
  • 它们真的会占用CPU时间,特别是当它们做错了事情或不够明确的时候。
  • 它们可能会打开逻辑漏洞,导致糟糕的结果,所以我们必须仔细测试它们。

不过,你的问题并不完全清楚:

...replace字符串的最后一个"/“和".vmx”之间的是什么?

这可能意味着您希望将整个路径替换为基本名称减去扩展名:

代码语言:javascript
复制
path = File.basename(path, File.extname(path)) 
# => "server1"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32190192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档