如何为String编写正则表达式模式以识别空格或超级之前的数字?

时间:2017-02-21 19:54:18

标签: java regex

我有一个自由流动的字符串,其中包含一些随机文本:

  • "Some random text 080 2668215901"
  • "Some ramdom text 040-1234567890"
  • "Some random text 0216789101112"

我需要捕获3位数字和以下10位数字:

  • 空间条件
  • with hypen condition
  • 没有任何空间/超级

我正在使用Java。

这就是我试图从自由流动的文本中获取数字:

"\\w+([0-9]+)\\w+([0-9]+)"

我可以进行字符串长度检查,看看在Hypen或空格之前是否有任何3位数字,然后是10位数字。但我真的想探索正则表达式是否可以给我一个更好的解决方案。

此外,如果String中有更多的出现,我需要全部捕获它们。我还需要捕获任何10位数的字符串,不需要在超级和空格之前

3 个答案:

答案 0 :(得分:2)

通常是(\d{3})[ -]?(\d{10})
边界条件可能为(?<!\d)(\d{3})[ -]?(\d{10})(?!\d)

答案 1 :(得分:1)

假设您将在各个行上运行此正则表达式,并忽略一些......更具表现力的正则表达式实现,这可能是最简单的方法:

/([0-9]{3})[ -]?([0-9]{10})/

如果您的文字可能以数字结尾,则您需要将结果锚定到该行的末尾,如下所示:

/([0-9]{3})[ -]?([0-9]{10})$/

如果您保证输入周围的文字双引号字符,则可以使用:

/([0-9]{3})[ -]?([0-9]{10})"$/

如果您需要匹配整行以进行某些输入错误测试,您可以使用:

/^"(.+)([0-9]{3})[ -]?([0-9]{10})"$/

答案 2 :(得分:0)

这是一个更长的演示。根据你上面的回答,你也会在比赛结束后寻找跟踪比赛的比赛。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Class {
  private static final Pattern p = Pattern.compile("" +
    "((?<threeDigits>\\d{3})[- ]?)?" +
    "(?<tenDigits>\\d{10})");

  public static void main(String... args) {
    final String input =
      "Here is some text to match: Some random text 080 2668215901. " +
        "We're now matching stray sets of ten digit as well: 1234567890. " +
        "Notice how you get the first ten and the second ten, with the preceding three:1234123412-040-1234567890" +
        "A stranger case:111222333444555666777888. Where should matches here begin and end?";
    printAllMatches(p.matcher(input));
  }

  private static void printAllMatches(final Matcher m) {
    while (m.find()) {
      System.out.println("three digits: " + m.group("threeDigits"));
      System.out.println("ten digits: " + m.group("tenDigits"));
    }
  }

}

切换到找到战斗计划。