我有来自短信的字符串,如:
“您的密码:123456。您的参考编号为012.总金额为E 1250,00 ..”
现在我需要提取代码'123456',它每次都不同,但总是6位数。
如何从字符串中提取这个6位数字?我能以某种方式使用正则表达式吗?我需要确定,所以我不想拆分'代码:',例如。
编辑: 文本的其余部分可以不同,但SMS中只有6位数字。
答案 0 :(得分:19)
6位数的regexpr是
\d{6}
编辑: 代码看起来像
public static String extractDigits(final String in) {
final Pattern p = Pattern.compile( "(\\d{6})" );
final Matcher m = p.matcher( in );
if ( m.find() ) {
return m.group( 0 );
}
return "";
}
答案 1 :(得分:6)
不确定Java的Regex是否支持外观。如果是的话:
(?<!\d)\d{6}(?!\d)
编辑:确实如此。 (谢谢波希米亚人)
答案 2 :(得分:2)
为什么不简单地使用substring()
?
String s = "Your code: 123456. Your reference number is 012. The total amount is E 1250,00..";
String s2 = s.substring(11);
String code = s2.substring(0, s2.indexOf("."));
或只是:
String code = s.substring(11, 17);
因为它总是6位数。
答案 3 :(得分:0)
String text = "125432";
String regex = "\\D*\\d{6}\\D*";
Matcher m = Pattern.compile(regex).matcher(text);
if(m.find())
System.out.println(m.group(0).trim().substring(0,6));