2

我正在尝试从文本中捕获某个数字块。假设凯恩的文字是 12345 英尺高。我想捕捉12345。我正在尝试使用这个:

import java.util.regex.Pattern; 
import java.util.regex.Matcher; 
String text = "Kane is 12345 feet high";
Pattern p = Pattern.compile("Kane is (\\d+) feet high");
Matcher m = p.matcher(text);
String s0 = m.group(0);

但是我收到一个Match not found错误。我在这里做错了什么?我的意思是,在 Perl 中,这完美地打印出来12345

$foo = "Kane is 12345 feet high";
$foo =~ /Kane is (\d+) feet high/;
print $1;
4

3 回答 3

8

仅实例化Matcher是不够的:您必须调用m.matches(),标准做法是将其放入 if 中:

if (m.matches()) s0 = m.group(1);
于 2013-01-09T10:26:59.797 回答
6

你必须在调用 Matcher.group() 之前调用 Matcher.find()

String text = "Kane is 12345 feet high";
Pattern p = Pattern.compile("Kane is (\\d+) feet high");
Matcher m = p.matcher(text);
if(m.find()){
String s0 = m.group(0);

}

假设文字是凯恩是 12345 英尺高。我要抓12345

我认为,您的正则表达式应该如下所示,以便仅捕获文本中的数字。

    Pattern p = Pattern.compile("\\d+");
于 2013-01-09T10:26:32.637 回答
1

尝试这个:

public static String stripNonDigits(final String input){
  final StringBuilder sb = new StringBuilder();
  for(int i = 0; i < input.length(); i++){
    final char c = input.charAt(i);
    if(c > 47 && c < 58){
        sb.append(c);
    }
}
return sb.toString();

测试代码:

public static void main(final String[] args){
final String input = "0-123-abc-456-xyz-789";
final String result = stripNonDigits(input);
System.out.println(result);
 }

输出:

0123456789

可能会有所帮助 谢谢

于 2013-01-09T10:38:01.250 回答