【问题标题】:find a 6 digit number in String在字符串中找到一个 6 位数字
【发布时间】:2012-02-02 09:09:15
【问题描述】:

我有一个来自 SMS 的字符串,例如:

“您的代码:123456。您的参考号是012。总金额是E 1250,00..”

现在我需要提取代码“123456”,每次都不一样,但总是6位数。

如何从字符串中提取这个 6 位数字?我可以以某种方式使用正则表达式吗?我需要确定,所以我不想拆分'代码:'例如。

编辑: 其余文本可以不同,但​​短信中只有 6 位数字。

【问题讨论】:

    标签: java regex


    【解决方案1】:

    6 位数字的正则表达式是

    \d{6}
    

    编辑: 代码看起来像

    public static String extractDigits(final String in) {
       final Pattern p = Pattern.compile( "(\\d{6})" );
       final Matcher m = p.matcher( in );
       if ( m.find() ) {
         return m.group( 0 );
       }
       return "";
     }
    

    【讨论】:

    • 但是,这会在输入中的任何位置找到 6 个数字
    • 您搜索的字符串是固定的,因为上面的 regexpr 默认会找到第一个匹配项
    • 只有一次文本中有6位数字,所以这解决了我的问题,谢谢!
    【解决方案2】:

    不确定 Java 的 Regex 是否支持环视。如果是这样:

    (?<!\d)\d{6}(?!\d)
    

    编辑:确实如此。 (感谢波西米亚)

    【讨论】:

    • Java 确实支持环视
    【解决方案3】:

    为什么不直接使用substring()

    String s = "Your code: 123456. Your reference number is 012. The total amount is E 1250,00..";
    String s2 = s.substring(11);
    String code = s2.substring(0, s2.indexOf("."));
    

    或者只是:

    String code = s.substring(11, 17);
    

    因为它总是 6 位数字。

    【讨论】:

    • 我已经编辑了我的问题。文本的其余部分可能不同(之前或之后),所以这将是一个问题。
    【解决方案4】:
       String text = "125432";
       String regex = "\\D*\\d{6}\\D*";
    
       Matcher m = Pattern.compile(regex).matcher(text);
       if(m.find())
          System.out.println(m.group(0).trim().substring(0,6));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-23
      • 2018-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-30
      • 2015-07-13
      • 2014-01-25
      相关资源
      最近更新 更多