如何拆分包含多个正斜杠的字符串

时间:2016-12-14 15:23:46

标签: ruby

我有一个字符串,如下所示,

./component/unit

并需要拆分以获得component/unit的结果,我将其用作插入哈希的键。

我尝试使用.split(/.\//).last,但其结果为unit,但却未获得component/unit

4 个答案:

答案 0 :(得分:5)

你的正则表达式几乎没问题:

split(/\.\//)

您需要同时转义.(任何字符)和/(正则表达式分隔符)。

作为替代方案,您可以删除第一个'./'子字符串:

'./component/unit'.sub('./','')
#=> "component/unit"

答案 1 :(得分:4)

我认为,这应该可以帮到你:

string = './component/unit'

string.split('./') 
#=> ["", "component/unit"]

string.split('./').last
#=> "component/unit"

答案 2 :(得分:2)

所有其他答案都很好,但我认为你并没有真正处理String,而是URIPathname,所以我建议你使用这些课程如果你可以的话。如果是这样,请调整标题,因为它不是关于自己动手的正则表达式,而是正确使用可用的库。

链接到ruby doc:

https://docs.ruby-lang.org/en/2.1.0/URI.htmlhttps://ruby-doc.org/stdlib-2.1.0/libdoc/pathname/rdoc/Pathname.html

路径名的示例是:

require 'pathname'

pathname = Pathname.new('./component/unit')
puts pathname.cleanpath # => "component/unit"
#    pathname.to_s      # => "component/unit"

这是一个好主意(和/或使用URI也会很酷)也取决于你真正的问题是什么,即你想用提取的字符串做什么。如上所述,我有点怀疑你是否真的喜欢Strings。

答案 3 :(得分:0)

使用正面的lookbehind,你可以使用正则表达式:

reg  = /(?<=\.\/)[\w+\/]+\w+\z/

演示

str  = './component'
str2 = './component/unit'
str3 = './component/unit/ruby'
str4 = './component/unit/ruby/regex'

[str, str2, str3, str4].each { |s| puts s[reg] }
#component
#component/unit
#component/unit/ruby
#component/unit/ruby/regex