0

I have a string something like this

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

I need to put JINSAL0056, JINSAL0057,JINSAL0041 in a field and number inside the (). I have written couple of codes let me know if I am going in the right directions.

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

How to write the split. Please do help me put

4

3 に答える 3

5

split に正規表現を渡すこともできます:

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"}
于 2012-05-25T10:34:48.933 に答える
4

試すことができると思います。(もちろん、最善の方法ではありません。)

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

結果は

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

しかし、スキャンを使用することをお勧めします(//)

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
于 2012-05-25T10:32:25.597 に答える
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
于 2012-05-25T15:33:02.377 に答える