['111','22','333','44','5','6','777'] 我目前使用的方法是使-6ren">
gpt4 book ai didi

Ruby 使用正则表达式在字符差异处拆分字符串

转载 作者:太空宇宙 更新时间:2023-11-03 17:06:41 24 4
gpt4 key购买 nike

我目前正在研究一个涉及按每组字符拆分字符串的问题。

例如,

"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/)

产生相同的结果。我考虑过积极的前瞻,但我无法弄清楚如何让正则表达式识别出这个角色是不同的。

有没有人知道这是否可能?

最佳答案

chunk_while方法是您在这里寻找的:

str.chars.chunk_while { |b,a| b == a }.map(&:join)

这将破坏当前字符 a 与前一个字符 b 不匹配的任何内容。如果您只想限制为数字,您可以进行一些预处理。

Enumerable 中有很多非常方便的方法值得探索,而且每个新版本的 Ruby 似乎都会添加更多。

关于Ruby 使用正则表达式在字符差异处拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39029898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com