【问题标题】:Regular Expression : find a number near to a given String正则表达式:查找给定字符串附近的数字
【发布时间】:2009-03-18 19:38:58
【问题描述】:

我正在尝试找到一种好方法来捕获距给定字符串不超过 N 个字符的数字。

例如,如果String是“age”并且N=4必须找到

"Age 5" => 5
"My age is 10 and I my name is John" => 10
"My age is almost 5 and I my name is Mary" => null

在最后一种情况下,数字与“年龄”相隔超过 4 个字符。

【问题讨论】:

    标签: java regex


    【解决方案1】:

    怎么样

    age[^0-9]{0,4}[0-9]+
    

    如果你想捕获可能找到的数字:

    age[^0-9]{0,4}([0-9]+)
    

    ?

    【讨论】:

    • 完美。谢谢你。我更喜欢 \d 语法,但我接受它:)
    【解决方案2】:

    类似于以下内容:

    age[^\d]{,4}(\d+)
    

    这意味着“年龄后跟 0 到 4 个非数字后跟一个或多个数字......捕获数字”

    【讨论】:

    • 谢谢。在 Java 中,你会得到一个 java.util.regex.PatternSyntaxException: Illegal repeat,并且必须使用“{0,4}”而不是“{,4}”
    【解决方案3】:
    [Aa]ge[\D]{,N}(\d+)
    

    然后获取第一组的内容($1)。

    【讨论】:

      【解决方案4】:

      在这里扩展其他答案,如果您需要它在任一方向上的 5 个字符以内:

      /((\d+)\D{,4})?age(\D{,4}(\d+))?/i
      

      然后:

      if(matches[2] != null)
      {
        if(matches[4] != null)
          return max(matches[2], matches[4]);  //or however you want to resolve this..
        else
          return matches[2];
      }
      return matches[4];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-15
        • 2011-03-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多