【问题标题】:Split a string into an array based on runs of contiguous characters根据连续字符的运行将字符串拆分为数组
【发布时间】:2011-01-24 01:53:51
【问题描述】:

我已经在 Ruby 中寻找这个问题的答案已经有一段时间了,但还没有找到一个好的解决方案。我想弄清楚的是如何在下一个字符与前一个字符不匹配时拆分字符串并将分组传递到数组中。即。

'aaaabbbbzzxxxhhnnppp'

变成

['aaaa', 'bbbb', 'zz', 'xxx', 'hh', 'nn', 'ppp']

我知道我可以遍历字符串中的每个字符并检查是否有变化,但我很好奇是否有任何内置的东西可以优雅地解决这个问题。

【问题讨论】:

  • 你没有指定如果只有一个字符会发生什么。
  • 你说得对,我没有。在上面的例子中,它应该只给数组一个字符。

标签: ruby regex string


【解决方案1】:

使用简单的正则表达式即可:

'aaaabbbbzzxxxhhnnppp'.scan(/((.)\2*)/).map{|x| x[0]}
=> ["aaaa", "bbbb", "zz", "xxx", "hh", "nn", "ppp"]

【讨论】:

  • 外圆括号是Ruby的String#scan保持输出结果所必需的;内括号是捕获单个字符所必需的,以便\2 可以引用它。您也可以在 Ruby 1.9 中将其编写为 str.scan(/((.)\2*)/).map(&:first)
猜你喜欢
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
相关资源
最近更新 更多