-2

我有一个这样的哈希:

hash = {"user:**xy@xy.com** password:**azerty**"=>1,
        "user:**yy@yy.com** password:**qwerty**"=>1}

如何仅提取每个元素的用户名(电子邮件)和密码以单独使用它。

最终使用拆分方法。例如,如何从第二个字符串中拆分字符串:

我想要这样的东西

Username  Password
xy@xy.com azerty
yy@yy.com qwerty
4

4 回答 4

1

处理这种情况的另一种方法:

hash.keys.to_s.scan(/user:(\w+@\w+.\w+)\spassword:(\w+)/)
#=> [["xy@xy.com", "azerty"], ["yy@yy.com", "qwerty"]]

分解:

  • hash.keys.to_s- 哈希中的键数组(因为我们不关心值)转换为字符串"[\"user:xy@xy.com password:azerty\", \"user:yy@yy.com password:qwerty\"]"
  • scan(/user:(\w+@\w+.\w+)\spassword:(\w+)/)- 匹配捕获组的数组

例子

于 2017-05-04T18:43:46.357 回答
0

考虑下面的片段。它会给你一个观点,你会知道,你应该从哪里开始。

h.keys().map {|x| x.split(" ")}.each do |e|
  puts "#{e.first.split(":").last}   #{e.last.split(":").last}"
end

# xy@xy.com   azerty
# yy@yy.com   qwerty
于 2017-05-03T12:24:18.957 回答
0
hash.each { |x,y| puts x.split(" ").to_s.gsub("user:", "").to_s.gsub("password:", "") }
# ["xy@xy.com", "azerty"]
# ["yy@yy.com", "qwerty"]
于 2017-05-03T12:32:24.227 回答
0

使用拆分

hash.each do |key, _val|
  puts key.split.map { |s| s.split(':').last }.join(' ')
end
于 2017-05-03T12:32:58.587 回答