【问题标题】:Java regex pattern for number数字的 Java 正则表达式模式
【发布时间】:2013-08-25 19:22:13
【问题描述】:

我知道这个问题可能很愚蠢,但我正试图从文本中获取一些信息,在过去三个小时的尝试之后,你是我最后的希望..

DIC: C/40764176 IC: 407641'6 
Dekujerne a t8ime se na shledanou 

我需要例如这个 40764176

我需要获取长度为 8-10 的字符串,有时可能会有一些特殊的字符,例如 I,i,G,S,O,ó,l) 但我为此尝试了很多模式,但没有一个有效...

我试过了:

String generalDicFormatPattern = "([0-9IiGSOól]{8,10})";
String generalDicFormatPattern = ".*([0-9IiGSOól]{8,10}).*";
String generalDicFormatPattern = "\\b([0-9IiGSOól]{8,10})\\b";

没有任何效果...你知道问题出在哪里吗?

编辑:

我以这种方式使用正则表达式:

private List<String> getGeneralDicFromLine(String concreteLine) {
    List<String> allMatches = new ArrayList<String>();

        Pattern pattern = Pattern.compile(generalDicFormatPattern);
        Matcher matcher = pattern.matcher(concreteLine);

        while (matcher.find()) {             
             allMatches.add(matcher.group(1));
        }                           


    return allMatches;
}   

【问题讨论】:

  • 你能告诉我们你是如何使用你的正则表达式的吗?
  • 是的,当然...我已经编辑了我的帖子。
  • 你的第一个和最后一个正则表达式对我来说很好ideone.com/yOLK3O 或者它可能是不正确的输出?
  • 输出是对的,我试试……

标签: java regex match


【解决方案1】:

如果你的字符串模式是固定的,你可以使用正则表达式

C/([^\s]{8,10})\sIC:

示例代码:

String s = "DIC: C/40764176 IC: 407641'6";

Pattern p = Pattern.compile("C/([^\\s]{8,10})\\sIC:");
Matcher m = p.matcher(s);

if (m.find()) {
    System.out.println(m.group(1)); // 40764176
}

我期待任何字符(包括您在示例中显示的特殊字符),但一个空格。

【讨论】:

  • 不,我需要获取长度为 8-10 的字符串,其中主要包含数字,但有时可能会有一些特殊字符,如 I,i,G,S,O,ó,l.. 所以例如我想得到 123i56ó89
  • 对于字符串DIC: C/123i56ó89 IC: 407641'6 程序输出123i56ó89。所以,它被覆盖了。
【解决方案2】:

也许你可以用空格分割你的字符串(string.split('\\s');),那么你应该有一个这样的数组:

  1. DIC:
  2. C/40764176
  3. 身份证:407641'6
  4. ...
  5. shledanou

获取第二个字符串,用'/'分割,得到第二个元素。

希望对你有所帮助。

提示:您可以使用正则表达式 (([0-9IiGSOól]{8,10}) 来检查结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多