无法拆分正则表达式并将结果放入数组中

时间:2017-02-14 22:10:28

标签: ruby-on-rails arrays ruby regex split

我正在使用Ruby 2.4。我在分割正则表达式并将结果转换为数组时遇到问题。如果我有一个像

这样的字符串
data:text/plain;charset=iso-8859-1,%b0 

我想将第一个字符从字符串的其余部分拆分,只有当第一个字符是“A”或“B”并且后面有一个空格时。因此,通过这些规则,分割上述内容将导致

"A other stuff"

但将这些规则应用于

["A", "other stuff"]

会导致

"Aother stuff"

(因为“A”后面没有空格)。我试过了

["Aother stuff"]

但是在我阵列的开头有一个恼人的空白字符,我不想要那里。谢谢你的建议。

2 个答案:

答案 0 :(得分:1)

使用lookbehind断言(这意味着开头):

yourstring.split(/(?<=^[ab])\s+/i)

外观断言的主要兴趣在于它们只是测试,它们不消耗字符,也不会在匹配结果中返回。

请注意,由于您只需要将字符串拆分一次,如果将split方法的第二个参数设置为2,它将在第一次出现时停止搜索(需要确认):

 yourstring.split(/(?<=^[ab])\s+/i, 2)

答案 1 :(得分:0)

这是一种不使用正则表达式的方法。

def doit(str)
  (!str.empty? && "ABab".include?(str[0]) && str[1] == ' ') ?
    [str[0], str[2..-1].lstrip] : [str]
end

doit 'A lot of stuff'     #=> ["A", "lot of stuff"] 
doit 'B     lot of stuff' #=> ["B", "lot of stuff"] 
doit 'C lot of stuff'     #=> ["C lot of stuff"] 
doit 'Alot of stuff'      #=> ["Alot of stuff"] 
doit 'B '                 #=> ["B", ""] 
doit 'b'                  #=> ["b"] 
doit ''                   #=> [""]