5

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

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

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

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

4

3 回答 3

8

在这里,试一试:

((\d)\2*)
于 2012-10-19T11:55:08.653 回答
5

你可以使用这个正则表达式

((\d)\2*)

第 1 组捕获您所需的值

于 2012-10-19T11:56:27.597 回答
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"]
于 2012-10-19T12:03:00.447 回答