在ruby 1.9.2中拆分字符串

时间:2012-05-25 10:22:56

标签: ruby-on-rails ruby ruby-on-rails-3.1

我有一个像这样的字符串

JINSAL0056(  1), JINSAL0057(  1), JINSAL0041(  1),

我需要将JINSAL0056,JINSAL0057,JINSAL0041放在()中的字段和数字中。 如果我朝着正确的方向前进,我已经写了几个代码让我知道。

s = "JINSAL0056(  1), JINSAL0057(  1), JINSAL0041(  1)"
ss = s.split(",")
sss = ss.split(" ( ")

如何编写拆分。请帮我把

3 个答案:

答案 0 :(得分:5)

您也可以将正则表达式传递给分割:

foo = "JINSAL0056(  1), JINSAL0057(  1), JINSAL0041(  1),"
foo.split(/[\(\),\s]+/)

结果:

["JINSAL0056", "1", "JINSAL0057", "1", "JINSAL0041", "1"]

并将其变成哈希:

Hash[*foo.split(/[\(\),\s]+/)]

哪个会给你:

{"JINSAL0056"=>"1", "JINSAL0057"=>"1", "JINSAL0041"=>"1"}

答案 1 :(得分:4)

我想你可以试试。 (当然不是最好的方式。)

yourstring = "JINSAL0056(  1), JINSAL0057(  1), JINSAL0041(  1),"
yourstring.split(/(\w+)\(\s*(\d)\)[,\s*]/)

结果将是

["", "JINSAL0056", "1", " ", "JINSAL0057", "1", " ", "JINSAL0041", "1"]

但我建议使用scan(//)

yourstring.scan(/(\w+)\(\s*(\d)\)[,\s*]/)

结果将是

[["JINSAL0056", "1"], ["JINSAL0057", "1"], ["JINSAL0041", "1"]]

分配变量,你可以像这样循环

yourstring.scan(/(\w+)\(\s*(\d)\)[,\s*]/).each do |a,b|
     puts "#{a} #{b}"
end

答案 2 :(得分:2)

s = "JINSAL0056(  1), JINSAL0057(  1), JINSAL0041(  1)"
res = s.split(', ').map{|line| line.chop.split('(  ')}
p res # [["JINSAL0056", "1"], ["JINSAL0057", "1"], ["JINSAL0041", "1"]]

res.each do |jinsal, number|
  puts "Do something with #{jinsal} and #{number}"
end