我正在使用Ruby 2.4。有沒有什麼辦法可以在正則表達式上分割並在數組中獲取結果元素?我認爲這是方式如何拆分正則表達式並將我的元素放入數組中?
2.4.0 :003 > word = "4.ARTHUR"
=> "4.ARTHUR"
2.4.0 :004 > word.split(/^\d+\./)
=> ["", "ARTHUR"]
但正如你看到的,我的數組的第一個元素是儘管該模式匹配一個空字符串。我想輸出是
["4.", "ARTHUR"]
我正在使用Ruby 2.4。有沒有什麼辦法可以在正則表達式上分割並在數組中獲取結果元素?我認爲這是方式如何拆分正則表達式並將我的元素放入數組中?
2.4.0 :003 > word = "4.ARTHUR"
=> "4.ARTHUR"
2.4.0 :004 > word.split(/^\d+\./)
=> ["", "ARTHUR"]
但正如你看到的,我的數組的第一個元素是儘管該模式匹配一個空字符串。我想輸出是
["4.", "ARTHUR"]
注意split
分裂其中找到一個匹配的字符串。所以,^\d+\.
匹配4.
在4.ARTHUR
在開始,因此,結果是一個空字符串(字符串的開始)和ARTHUR
。爲了保持split
操作過程中獲得與之相匹配的正則表達式,你需要捕獲組來包裝整個模式和擺脫空的物品,你可以稍後將其刪除:
word.split(/^(\d+\.)/).reject { |x| x.empty? }
爲什麼不只是做
irb(main):004:0> word = "4.ARTHUR"
=> "4.ARTHUR"
irb(main):005:0> word.split('.')
=> ["4", "ARTHUR"]
當你想分手了一個字符串,但保留其所有的部分,String#scan
往往是更適合比String#split
:
word = "4.ARTHUR"
word.scan(/^\d+\.|.+/)
# => ["4.", "ARTHUR"]
查看它repl.it:https://repl.it/F90q
嘗試此
a, b = word.match(/^(\d+\.)?(.*)/).captures
split
的方法是指與隔板一起使用,如例如逗號。你正在做的是將字符串分成兩部分,沒有分隔符,只需使用捕獲組。
是否意味着你需要'''在數組中?試試'word.split(/ ^(\ d + \。)/)' –
這肯定會讓我更接近一點。現在該數組是[「」,「4.」,「ARTHUR」]。有什麼辦法可以讓它只有那兩個元素? – Dave
刪除它們:'word.split(/ ^(\ d + \。)/)。reject {| c | c.empty? }' –