【发布时间】:2016-12-26 01:48:08
【问题描述】:
我目前正在解决一个问题,该问题涉及按每组字符拆分字符串。
例如,
"111223334456777" #=> ['111','22','333','44','5','6','777']
我现在这样做的方式是使用枚举器并将每个字符与下一个字符进行比较,然后以这种方式拆分数组。
res = []
str = "111223334456777"
group = str[0]
(1...str.length).each do |i|
if str[i] != str[i-1]
res << group
group = str[i]
else
group << str[i]
end
end
res << group
res #=> ['111','22','333','44','5','6','777']
我想看看我是否可以使用正则表达式来执行此操作,这将使此过程变得容易得多。我知道我可以将这段代码放在一个方法中,但我很好奇是否可以在这里使用正则表达式。
所以我想做的是
str.split(/some regex/)
产生相同的结果。我考虑过积极的前瞻,但我不知道如何让正则表达式识别角色不同。
有人知道这是否可行吗?
【问题讨论】:
-
这不能回答你的问题,但你可以写
"111223334456777".each_char.slice_when { |a,b| a!=b }.map(&:join) #=> ["111", "22", "333", "44", "5", "6", "777"]。 -
@CarySwoveland,你的代码绝对比我的更干净,我写这些代码是为了澄清我在寻找什么。
-
根据@Stefan 对 Tadman 的回答的评论,以上可以简化为
"111223334456777".each_char.slice_when(&:!=).map(&:join)。