0

我需要一个给出以下字符串的正则表达式:“12.123.123/1234-11”、“12.123123123411”或“1123123/1234-11”。我只能提取数字(12123123123411);

Pattern padrao = Pattern.compile("\d+");
Matcher matcher = padrao.matcher("12.123.123/1234-11");
while (matcher.find()) {
    System.out.println(matcher.group());
}
//output:12,123,123,1234,11,
//I need: 121231234123411

谁能帮我?

4

2 回答 2

9

更好的方法是使用String#replaceAll(regex, replacement)方法替换除数字以外的所有字符(如您所见,该方法采用正则表达式进行替换):

String str = "12.123.123/1234-11";
String digits = str.replaceAll("\\D", "");

\\D匹配非数字字符。相当于[^0-9]。请注意,您需要转义\Don Java 正则表达式引擎。


如果您对使用Matcher#group()方法有限制,那么您必须在StringBuilder每次找到数字时构建一个实例,附加数字:

String str = "12.123.123/1234-11";
StringBuilder digits = new StringBuilder();

Matcher matcher = Pattern.compile("\\d+").matcher(str);

while (matcher.find()) {
    digits.append(matcher.group());
}

System.out.println(digits);
于 2013-08-09T13:34:38.273 回答
2

您可以通过 replaceAll 简单地删除所有非数字字符:

String out = string.replaceAll("\\D+", "");
于 2013-08-09T13:35:16.627 回答