我正在使用Ruby 2.4。有没有什么方法可以拆分正则表达式并将结果元素放在数组中?我认为这是方式
2.4.0 :003 > word = "4.ARTHUR"
=> "4.ARTHUR"
2.4.0 :004 > word.split(/^\d+\./)
=> ["", "ARTHUR"]
但正如您所见,尽管模式匹配,但我的数组的第一个元素是一个空字符串。我想输出
["4.", "ARTHUR"]
答案 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
方法用于分隔符,例如逗号。你正在做的是将字符串分成两部分,没有分隔符,只需使用捕获组。