是否有可能在Ruby上用正则表达式捕获字符串中所有相同的数字?我不熟悉正则表达式。
我的意思是:"1112234444"
上的正则表达式会生成["111", "22", "3", "4444"]
我知道,我可以使用(\d)(\1*)
,但每次比赛只给我2组。 ["1", "11"], ["2", "2"], ["3", -], ["4", "444"]
如何在每场比赛中获得1组?感谢。
答案 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"]