我有一个字符串
Purchases 10384839,Purchases 10293900,Purchases 20101024
任何人都可以帮我解析这个吗?我尝试使用StringScanner,但我对正则表达式并不熟悉(不是很多练习)。
如果我可以把它分成
myarray[0] = {type => "Purchases", id="10384839"}
myarray[1] = {type => "Purchases", id="10293900"}
myarray[2] = {type => "Purchases", id="20101024"}
那太棒了!
答案 0 :(得分:23)
string = "Purchases 10384839,Purchases 10293900,Purchases 20101024"
string.scan(/(\w+)\s+(\d+)/).collect { |type, id| { :type => type, :id => id }}
答案 1 :(得分:11)
你可以用正则表达式来做,或者只用Ruby做:
myarray = str.split(",").map { |el|
type, id = el.split(" ")
{:type => type, :id => id }
}
现在你可以像'myarray [0] [:type]'那样解决它。
答案 2 :(得分:7)
正则表达式不是必需的,并且可能不是最清楚的方法。在这种情况下,您需要的方法是split
。像这样的东西会起作用
raw_string = "Purchases 10384839,Purchases 10293900,Purchases 20101024"
myarray = raw_string.split(',').collect do |item|
type, id = item.split(' ', 2)
{ :type => type, :id => id }
end
分割和收集方法的文档可以在这里找到:
答案 3 :(得分:2)
这是一个irb会话:
dru$ irb
irb(main):001:0> x = "Purchases 10384839,Purchases 10293900,Purchases 20101024"
=> "Purchases 10384839,Purchases 10293900,Purchases 20101024"
irb(main):002:0> items = x.split ','
=> ["Purchases 10384839", "Purchases 10293900", "Purchases 20101024"]
irb(main):006:0> items.map { |item| parts = item.split ' '; { :type => parts[0], :id => parts[1] } }
=> [{:type=>"Purchases", :id=>"10384839"}, {:type=>"Purchases", :id=>"10293900"}, {:type=>"Purchases", :id=>"20101024"}]
irb(main):007:0>
基本上,我首先要分开','。然后我会按空格分割每个项目并使用部分创建哈希对象。不需要正则表达式。
答案 4 :(得分:1)
s = 'Purchases 10384839,Purchases 10293900,Purchases 20101024'
myarray = s.split(',').map{|item|
item = item.split(' ')
{:type => item[0], :id => item[1]}
}