2017-02-06 25 views
1

我正在使用Ruby 2.4。有沒有什麼辦法可以在正則表達式上分割並在數組中獲取結果元素?我認爲這是方式如何拆分正則表達式並將我的元素放入數組中?

2.4.0 :003 > word = "4.ARTHUR" 
=> "4.ARTHUR" 
2.4.0 :004 > word.split(/^\d+\./) 
=> ["", "ARTHUR"] 

但正如你看到的,我的數組的第一個元素是儘管該模式匹配一​​個空字符串。我想輸出是

["4.", "ARTHUR"] 
+0

是否意味着你需要'''在數組中?試試'word.split(/ ^(\ d + \。)/)' –

+0

這肯定會讓我更接近一點。現在該數組是[「」,「4.」,「ARTHUR」]。有什麼辦法可以讓它只有那兩個元素? – Dave

+0

刪除它們:'word.split(/ ^(\ d + \。)/)。reject {| c | c.empty? }' –

回答

0

注意split分裂其中找到一個匹配的字符串。所以,^\d+\.匹配4.4.ARTHUR在開始,因此,結果是一個空字符串(字符串的開始)和ARTHUR。爲了保持split操作過程中獲得與之相匹配的正則表達式,你需要捕獲組來包裝整個模式和擺脫空的物品,你可以稍後將其刪除:

word.split(/^(\d+\.)/).reject { |x| x.empty? } 
0

爲什麼不只是做

irb(main):004:0> word = "4.ARTHUR" 
=> "4.ARTHUR" 
irb(main):005:0> word.split('.') 
=> ["4", "ARTHUR"] 
0

當你想分手了一個字符串,但保留其所有的部分,String#scan往往是更適合比String#split

word = "4.ARTHUR" 
word.scan(/^\d+\.|.+/) 
# => ["4.", "ARTHUR"] 

查看它repl.it:https://repl.it/F90q

0

嘗試此

a, b = word.match(/^(\d+\.)?(.*)/).captures 

split的方法是指與隔板一起使用,如例如逗號。你正在做的是將字符串分成兩部分,沒有分隔符,只需使用捕獲組。