2009-10-04 119 views
2

我有一堆字符串在形式的數組:如何獲取文本和字符串?

[「名稱:喜」,「PW:洛爾」]

如何可以只提取分號和空間之後的部分在Ruby中?

+0

的可能重複[如何分割在Ruby中的字符串?](http://stackoverflow.co m/questions/4032440/how to to split-a-string-in-ruby) – 2012-01-23 18:02:06

回答

7
["name: hi", "pw: lol"].map{|x| x.split(': ')[1]} 

生產:

["hi", "lol"] 
+0

如果你不確定在:之後是否只有一個空格,你可以在':'上分割,然後使用.strip刪除任何空格。 – Pablo 2009-10-04 09:23:14

1

你可以通過它們循環,並將它們分割了由:像這樣:

["name: hi", "pw: lol"].each do |item| 
    puts item.split(":").last.lstrip 
end 

實施例:

>> a = ["name: hi", "pw: lol"] 
=> ["name: hi", "pw: lol"] 
>> a.each do |item| 
?> puts item.split(":").last.lstrip 
>> end 

>> hi 
>> lol 
4

由該建議加勒特和寵物呃一定會訣竅的。但是,如果你願意,你可以更進一步,輕鬆地把它變成一個散列。

values = ["name: hi", "pw: lol"] 
hash = Hash[*values.map{|item| item.split(/\s*:\s*/)}.flatten] 
# => {"name"=>"hi", "pw"=>"lol"} 

有擠進第二行,所以讓我指出一些改進頗多:

  • 分裂允許在結腸的靈活性,允許任意數量的之前和之後的空間。
  • map通話結束後,我們有數組[["name", "hi"], ["pw", "lol"]]
  • Hash#[]需要將被映射爲重點,值,鍵,值,值的列表...因此,我們需要壓扁映射的陣列通過到Hash#[]

因爲我不知道您的具體需求,我不能說是否要散列或沒有,但它是不錯的選擇。

1

我建議你使用正則表達式來處理字符串,雖然以前的答案工作

A = [ 「名稱:喜」, 「PW:笑」]

a.map {|項目| item.match(/ \ W +: ([\ W \ S] +)/)[1]}

此將輸出:

=> [ 「喜」, 「笑」 ]

0
a.to_s 
    h=hi~=a 

a.index[h].value 

hi{1} 
+0

您的答案格式不正確。代碼行應該以4個空格開始。此外,您的答案似乎不起作用,請添加解釋和/或修復它。 – spatz 2012-01-21 22:19:37

相關問題