在Ruby中解析字符串(Regexp?)

Sam*_*Sam 3 ruby regex

我有一根绳子

Purchases 10384839,Purchases 10293900,Purchases 20101024
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解析这个吗?我尝试使用StringScanner,但我对正则表达式并不熟悉(不是很多练习).

如果我能把它分开

myarray[0] = {type => "Purchases", id="10384839"}
myarray[1] = {type => "Purchases", id="10293900"}
myarray[2] = {type => "Purchases", id="20101024"}
Run Code Online (Sandbox Code Playgroud)

那真棒!

mol*_*olf 23

string = "Purchases 10384839,Purchases 10293900,Purchases 20101024"
string.scan(/(\w+)\s+(\d+)/).collect { |type, id| { :type => type, :id => id }}
Run Code Online (Sandbox Code Playgroud)

  • Rutger的解决方案没有任何问题,但这对我来说更像是Ruby.+1 (3认同)

Rut*_*ing 11

你可以用regexp来做,或者只是在Ruby中做:

myarray = str.split(",").map { |el| 
    type, id = el.split(" ")
    {:type => type, :id => id } 
}
Run Code Online (Sandbox Code Playgroud)

现在你可以像'myarray [0] [:type]'那样解决它.


Emi*_*ily 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
Run Code Online (Sandbox Code Playgroud)

可以在此处找到split和collect方法的文档:

Enumerable.collect
String.split