Ruby - 从字符串中提取子字符串

时间:2018-01-09 04:24:13

标签: ruby regex

我有一个字符串数组

["/currencies/avoncoin/"] 

我需要输出名称(在这种情况下,字符串将是

avoncoin

如何使用Ruby形成正则表达式?

5 个答案:

答案 0 :(得分:1)

您可以使用gsub

arr = ["/currencies/avoncoin/"]
arr = arr.map{ |s| s.gsub("/currencies/", "").gsub("/","") }

答案 1 :(得分:1)

除了Shannon建议的那个之外,您还可以使用以下方法。

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"