【发布时间】:2012-02-02 09:09:15
【问题描述】:
我有一个来自 SMS 的字符串,例如:
“您的代码:123456。您的参考号是012。总金额是E 1250,00..”
现在我需要提取代码“123456”,每次都不一样,但总是6位数。
如何从字符串中提取这个 6 位数字?我可以以某种方式使用正则表达式吗?我需要确定,所以我不想拆分'代码:'例如。
编辑: 其余文本可以不同,但短信中只有 6 位数字。
【问题讨论】:
我有一个来自 SMS 的字符串,例如:
“您的代码:123456。您的参考号是012。总金额是E 1250,00..”
现在我需要提取代码“123456”,每次都不一样,但总是6位数。
如何从字符串中提取这个 6 位数字?我可以以某种方式使用正则表达式吗?我需要确定,所以我不想拆分'代码:'例如。
编辑: 其余文本可以不同,但短信中只有 6 位数字。
【问题讨论】:
6 位数字的正则表达式是
\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 "";
}
【讨论】:
不确定 Java 的 Regex 是否支持环视。如果是这样:
(?<!\d)\d{6}(?!\d)
编辑:确实如此。 (感谢波西米亚)
【讨论】:
为什么不直接使用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 位数字。
【讨论】:
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));
【讨论】: