如何在和字符串之间获取文本?

时间:2009-10-04 01:26:38

标签: ruby

我在数组中有一堆字符串:

[“name:hi”,“pw:lol”]

如何在Ruby中提取分号和空格后的部分?

5 个答案:

答案 0 :(得分:7)

["name: hi", "pw: lol"].map{|x| x.split(': ')[1]}

产生

["hi", "lol"]

答案 1 :(得分:4)

加勒特和彼得的建议肯定会成功。但是,如果您愿意,可以更进一步,轻松将其转换为哈希值。

values = ["name: hi", "pw: lol"]
hash = Hash[*values.map{|item| item.split(/\s*:\s*/)}.flatten]
# => {"name"=>"hi", "pw"=>"lol"}

第二行有很多内容,所以让我指出一些改进:

  • 分割允许冒号灵活,允许前后任意数量的空格。
  • map来电后我们有了数组[["name", "hi"], ["pw", "lol"]]
  • Hash#[]获取将被映射为键,值,键,值等的值列表...因此,我们需要将映射的数组展平为传递给Hash#[]

由于我不知道你的确切需求,我不能说你是否想要哈希,但是有选择权很好。

答案 2 :(得分:1)

您可以循环浏览它们并按:分割它们,如下所示:

["name: hi", "pw: lol"].each do |item|
    puts item.split(":").last.lstrip
end

示例:

>> a = ["name: hi", "pw: lol"]
=> ["name: hi", "pw: lol"]
>> a.each do |item|
?> puts item.split(":").last.lstrip
>> end

>> hi
>> lol

答案 3 :(得分:1)

我建议您使用正则表达式来处理字符串,尽管之前的答案有效

  

a = [“name:hi”,“pw:lol”]

     

a.map {|项| item.match(/ \ W +:   ([\ W \ S] +)/)[1]}

这会输出:

  

=> [“hi”,“lol”]

答案 4 :(得分:0)

a.to_s
     h=hi~=a

a.index[h].value

hi{1}