我有一个字符串数组
["/currencies/avoncoin/"]
我需要输出名称(在这种情况下,字符串将是
avoncoin
如何使用Ruby形成正则表达式?
答案 0 :(得分:1)
您可以使用gsub
:
arr = ["/currencies/avoncoin/"]
arr = arr.map{ |s| s.gsub("/currencies/", "").gsub("/","") }
答案 1 :(得分:1)
arr = ["/currencies/avoncoin/"]
arr = arr.map{ |s| s.split("/").last }
执行的操作更少,更短。
答案 2 :(得分:1)
您可以使用scan
或其速记等效内容:
data.flat_map do |e|
e.scan(%r[\A/currencies/([^/]+)/])[0]
end.compact
此处使用正则表达式的%r[...]
表示法,因为您的字符串包含/
,这在/.../
默认表单中具有重要意义。 flat_map
有助于提取匹配项,并compact
删除未命中项。
对以下数据进行操作:
data = ["/currencies/avoncoin/", "/currencies/xcoin/", "/false/positive/"]
你会得到:
["avoncoin", "xcoin"]
答案 3 :(得分:0)
如果匹配应该独立于密钥,您可以尝试
arr = ["/currencies/avoncoin/", "/currencies/xcoin/", "/something/else/"]
re = /^\/[^\/]+\/([^\/]+)\//
arr.map{ |str| re.match(str)[1] }
如果使用正则表达式不是强制性的,您可以
arr.map{ |str| str.split('/').dig(2) }
更具可读性和红宝石色。
两者的输出都是['avoncoin', 'xcoin', 'else']
答案 4 :(得分:0)
假设:
> s
=> "/currencies/avoncoin/"
你可以在ruby中做一个正则表达式切片:
> s[/([^\/]+)\/$/,1]
=> "avoncoin"