2012-05-25 5 views
0

J'ai une chaîne quelque chose comme çadécoupant une chaîne en Ruby 1.9.2

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

je dois mettre JINSAL0056, JINSAL0057, JINSAL0041 dans un champ et le numéro à l'intérieur du(). J'ai écrit quelques codes me faire savoir si je vais dans les bonnes directions.

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

Comment écrire la division. S'il vous plaît faites-moi aider à mettre

Répondre

5

Vous pouvez passer regexes à diviser aussi:

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

Le résultat:

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

Et en faire un hachage:

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

qui vous donnera :

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

Je crois que '/ [^ \ w] + /' est suffisant dans le cas. – jdoe

+0

@iain Merci beaucoup. Mais je veux assigner JINSAL0056 à une variable et 1 à une variable différente. Comment fait-on ça –

4

Je pense que vous pouvez essayer. (Pas la meilleure façon bien sûr.)

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

Résultat sera

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

mais je recommande d'utiliser le scan (//)

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

Résultat sera

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

pour affecter une variable, vous pouvez faire une boucle comme ceci

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

Comme la version 'de scan', mais il devrait probablement être' \ s * 'et non' \ s + ', car il semble qu'il y ait de la place pour 2 chiffres comme' ABC (12) ' . – Casper

+0

vous avez raison, merci beaucoup. – Jirapong

+0

@Jirapong J'ai été capable de le diviser. Merci beaucoup. Mais je veux assigner JINSAL0056 à une variable et 1 à une variable différente. Comment je le fais –

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