如何拆分正则表达式并将我的元素放入数组中?

时间:2017-02-06 21:49:38

标签: arrays ruby regex split

我正在使用Ruby 2.4。有没有什么方法可以拆分正则表达式并将结果元素放在数组中?我认为这是方式

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

但正如您所见,尽管模式匹配,但我的数组的第一个元素是一个空字符串。我想输出

["4.", "ARTHUR"]

4 个答案:

答案 0 :(得分:0)

请注意,split会将找到匹配项的字符串拆分。因此,^\d+\.在开头4.匹配4.ARTHUR,因此结果为空字符串(字符串的开头)和ARTHUR。要使split操作期间获得的匹配与正则表达式保持一致,您需要使用捕获组包装整个模式并删除空项,您可以稍后删除它们:

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

答案 1 :(得分:0)

为什么不做呢

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

答案 2 :(得分:0)

当您想要分割字符串但保留其所有部分时,String#scan通常比String#split更合适:

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

在repl.it上查看:https://repl.it/F90q

答案 3 :(得分:0)

试试这个

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

split方法用于分隔符,例如逗号。你正在做的是将字符串分成两部分,没有分隔符,只需使用捕获组。