正则表达式在Ruby中捕获相同数字的组

时间:2012-10-19 11:38:12

标签: ruby regex numbers digits

是否有可能在Ruby上用正则表达式捕获字符串中所有相同的数字?我不熟悉正则表达式。

我的意思是:"1112234444"上的正则表达式会生成["111", "22", "3", "4444"]

我知道,我可以使用(\d)(\1*),但每次比赛只给我2组。 ["1", "11"], ["2", "2"], ["3", -], ["4", "444"]

如何在每场比赛中获得1组?感谢。

3 个答案:

答案 0 :(得分:8)

在这里,请试一试:

((\d)\2*)

答案 1 :(得分:5)

您可以使用此正则表达式

((\d)\2*)

第1组获取所需的值

答案 2 :(得分:1)

我的第一个快速回答被批评为没有对代码的解释。所以这是另一个,在所有方面都更好; - )

我们利用了这样一个事实:我们想要的运行的元素是数字,并且它们易于手动枚举。因此,我们构造了一个可读的正则表达式,意思是“一系列零,或一系列的运行,......或一连串的运行”。我们使用正确的方法来完成工作String#scan

irb> "1112234444".scan(/0+|1+|2+|3+|4+|5+|6+|7+|8+|9+/)
=> ["111", "22", "3", "4444"]

记录中,这是我的原始答案:

irb> s = "1112234444"
=> "1112234444"
irb> rx = /(0+|1+|2+|3+|4+|5+|6+|7+|8+|9+)/
=> /(0+|1+|2+|3+|4+|5+|6+|7+|8+|9+)/
irb> s.split(rx).reject(&:empty?)
=> ["111", "22", "3", "4444"]