【问题标题】:Regex to catch groups of same digits in Ruby正则表达式在 Ruby 中捕获相同数字组
【发布时间】:2012-10-19 11:38:12
【问题描述】:

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

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

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

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

【问题讨论】:

  • 戴夫,是的,在这种情况下它很重要。我知道如何在没有正则表达式的情况下解决它,但如果可能的话,我需要正则表达式。

标签: ruby regex numbers digits


【解决方案1】:

来,试一试:

((\d)\2*)

【讨论】:

  • 哇,很高兴知道。在"1112234444" 上应该如何调用它? "1112234444"[/((\d)\2*)/] 只给出“111”。谢谢。
  • 你可以使用"1112234444".scan(/((\d)\2*)/)
【解决方案2】:

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

((\d)\2*)

第 1 组捕获您所需的值

【讨论】:

    【解决方案3】:

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

    我们利用这样一个事实,即我们想要运行的元素是数字,并且它们很容易手动枚举。所以我们构造了一个可读的正则表达式,意思是“一连串零,或一连串,……或一连串九”。我们使用正确的方法来完成这项工作,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"]
    

    【讨论】:

    • 你应该解释你的帖子和你的工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    相关资源
    最近更新 更多