如何分割此字符串。ruby通過重複字符或空格分割字符串
"6885558 8866887777" => ["6", "88", "555", "8", "88", "66", "88", "7777"]
我試過這個,但它沒有奏效。
ruby-1.8.7-p334 :020 > "111133".split(/(\d)\1+/)
=> ["", "1", "", "3"]
如何分割此字符串。ruby通過重複字符或空格分割字符串
"6885558 8866887777" => ["6", "88", "555", "8", "88", "66", "88", "7777"]
我試過這個,但它沒有奏效。
ruby-1.8.7-p334 :020 > "111133".split(/(\d)\1+/)
=> ["", "1", "", "3"]
split
將只使用任何它作爲分隔符相匹配,從有問題的字符串,刪除它。什麼你要找的是scan
:
str = "6885558 8866887777"
str.scan(/((\d)\2*)/).map(&:first)
# => ["6", "88", "555", "8", "88", "66", "88", "7777"]
服用慢,\d
任何數字相匹配。它在第二個捕獲組中,所以\2*
然後匹配任何進一步的相同數字。這將產生一個數組,看起來像
[["6", "6"], ["88", "8"], ["555", "5"], ["8", "8"],
["88", "8"], ["66", "6"], ["88", "8"], ["7777", "7"]]
由於我們只希望在每個這些子陣列的第一個項目,我們可以收集所有與map(&:first)
。
(請注意,str.scan(/(\d)\1*/)
只會產生一個數組出第一個捕獲組,這意味着我們就只能從可能重複的數字序列得到一個數字的。)
+1爲優秀的解釋。 – 2012-02-15 12:44:37
這很有幫助,謝謝。 – Robin 2013-03-28 04:09:39
我不認爲一個'split'方法將起作用,因爲這些方法會刪除由「split」匹配的字符。我想你可能需要迭代字符串。 – Oliver 2012-02-15 11:21:23