0

我有一个包含字符串的文件,这些字符串又包含 10 位数字。我需要使用正则表达式提取数字并将它们放入一个数组中。我想我可以使用\d{10},但我不确定如何在 Java 中实际应用它。

此外,复杂性的一个额外因素是,如果有很多数字,可能会有多个具有不同形式的数字,例如123456745-9123456745-95表示一个范围。我也想提取这些数字。(我可以处理在 java 中创建数字范围,不需要正则表达式)

任何提示将不胜感激!

4

2 回答 2

3

您可以拆分非数字字符,但保留-

String[] numbers = input.split("[^\\-\\d]+");

例子:

String input = "bla bla bla 123456789 bla bla 123456789 bla bla 123456765-9 bla bla bla 123456767-89 bla bla";
input = input.replaceFirst("^[^\\-\\d]*", ""); //remove the leading non-digits if any
String[] numbers = input.split("[^\\-\\d]+"); //split
System.out.println(Arrays.toString(numbers));

输出:

[123456789, 123456789, 123456765-9, 123456767-89]
于 2013-06-05T17:00:11.913 回答
0

正则表达式比您想象的要简单。您只需要匹配任何数字一次或多次。

例子:

String line = "a line with some digits 123456745-9 and maybe some more 343-34 and a single 1 99 ";
String regexpattern = "(\\d+)(-(\\d+))?";
Pattern pattern = Pattern.compile(regexpattern);
Matcher matcher = pattern.matcher(line);
while (matcher.find()){
    System.out.println("number= '" + matcher.group(1)+"'");
    if (matcher.group(3) != null)
        System.out.println("range '" + matcher.group(3)+"'");
}

此输出将如下

number= '123456745'
ranges to '9'
number= '343'
ranges to '34'
number= '1'
number= '99'
于 2013-06-05T16:58:50.563 回答