0

我有一个这样的字符串

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

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

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

怎么写分割线。请帮我把

4

3 回答 3

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"}
于 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"]

但我建议使用 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
于 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 回答