我正在使用Ruby 2.4。我在分割正则表达式并将结果转换为数组时遇到问题。如果我有一个像
这样的字符串data:text/plain;charset=iso-8859-1,%b0
我想将第一个字符从字符串的其余部分拆分,只有当第一个字符是“A”或“B”并且后面有一个空格时。因此,通过这些规则,分割上述内容将导致
"A other stuff"
但将这些规则应用于
["A", "other stuff"]
会导致
"Aother stuff"
(因为“A”后面没有空格)。我试过了
["Aother stuff"]
但是在我阵列的开头有一个恼人的空白字符,我不想要那里。谢谢你的建议。
答案 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 '' #=> [""]