我有一个像这样的字符串
JINSAL0056( 1), JINSAL0057( 1), JINSAL0041( 1),
我需要将JINSAL0056,JINSAL0057,JINSAL0041放在()中的字段和数字中。 如果我朝着正确的方向前进,我已经写了几个代码让我知道。
s = "JINSAL0056( 1), JINSAL0057( 1), JINSAL0041( 1)"
ss = s.split(",")
sss = ss.split(" ( ")
如何编写拆分。请帮我把
答案 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