我试图从文本中捕获一定数量的块。假设文本 Kane高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;
答案 0 :(得分:8)
仅仅实例化Matcher
是不够的:您必须致电m.matches()
,标准做法是将其放入if:
if (m.matches()) s0 = m.group(1);
答案 1 :(得分: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);
}
假设文字是Kane高12345英尺。我想捕获12345
我认为,你的正则表达式应该如下所示,以便只捕获文本中的数字。
Pattern p = Pattern.compile("\\d+");
答案 2 :(得分: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
可能会有所帮助,谢谢