【问题标题】:Regex to match Number of 1-3 Digits After a Known String in Ruby正则表达式匹配 Ruby 中已知字符串后的 1-3 位数
【发布时间】:2013-01-15 18:22:19
【问题描述】:

我需要匹配以下字符串中的数字。它们可能是其中包含其他数字的较长字符串的一部分,因此我特别想匹配 紧跟文本“错误代码”之后的空格之后出现的数字:: p>

Error Code 0  # Match = 0
Error Code 45 # Match = 45
Error Code 190 # Match = 190

也可以:

Some Words 12 Error Code 67 Some Words 77 # Match = 67

我正在使用someString.match(regEx)[0],但我无法正确使用正则表达式。

【问题讨论】:

  • 您使用哪种语言?你正在尝试什么正则表达式?

标签: ruby regex string numbers


【解决方案1】:
/(?:Error Code )[0-9]+/

这使用了一个非捕获组(并非在所有正则表达式实现中都可用。)它会说,嘿,字符串最好有这个短语,但我不希望这个短语成为我匹配的一部分,只是数字跟随。

如果您只想匹配 1 到 3 位数字:

/(?:Error Code )[0-9]{1,3}/

使用 Ruby,您的正则表达式应该很少遇到限制。除了条件之外,Ruby 的正则表达式并没有什么不能做的。

【讨论】:

  • +1 - 而不是[0-9] 我会做\d,否则这应该可以正常工作。我对其进行了调整以显示正则表达式分隔符——一些 OP 也无法确定这些是必需的。
  • 谢谢。但这似乎包括匹配中的字符串:s = 'This is an Error Code 45 and some 19s'puts s.match(/(?:Error Code )[0-9]{1,3}/)[0] 给出了“错误代码 45”的匹配
  • 当我在线回答许多正则表达式问题时,我倾向于使用 0-9 等,因为它们对 OP 来说是显而易见的。 \d 使人们需要知道它表示同一件事。 (另外,在这样的小型正则表达式中,我更喜欢使用 0-9,因为它对我来说更具可读性。)
  • 嗯,我对 Ruby 不够熟悉(阅读:一点也不)知道为什么它不能识别非捕获组符号...
【解决方案2】:

给定字符串“错误代码 190”,这将返回“190”,而不是像此处提供的其他正则表达式示例那样返回“错误代码”。

(?<=Error Code.*)[0-9]

【讨论】:

    【解决方案3】:

    我会使用以下正则表达式:

    /Error\sCode\s\d{1,3}/
    

    或者,使用命名组:

    /Error\sCode\s(?<error_code>\d{1,3})/
    

    最后一个将捕获一个命名组下的错误代码,即数字。请注意,\s 匹配空格,但除非指定 x 标志,否则它是不必要的。您可以像这样访问比赛截图:

    str = "Error Code 0\nError Code 45\nError Code 190"
    error_codes = str.lines.map{|l|l.match(regex)[:error_code]}
    #=> ["0", "45", "190"]
    

    【讨论】:

      【解决方案4】:

      你可以使用这个正则表达式: 只有数字,从 1 数到 3:

      regexp = "^\\d{1,3}$"
      

      【讨论】:

        猜你喜欢
        • 2020-01-25
        • 1970-01-01
        • 2020-09-28
        • 2018-06-24
        • 1970-01-01
        • 2014-08-01
        • 2017-09-03
        • 1970-01-01
        相关资源
        最近更新 更多