一個6位數字,我有一個字符串從一個短信,如:找到字符串
「您的代碼:123456。您的參考編號爲012的總金額爲E 1250,00 ..」
現在我需要提取代碼'123456',每次都不一樣,但總是6位數。
如何從字符串中提取這6位數字?我能否以某種方式使用正則表達式?我需要確定,所以我不想在'code:'上分割。
編輯: 文本的其餘部分可能不同,但SMS中只有6位數字。
一個6位數字,我有一個字符串從一個短信,如:找到字符串
「您的代碼:123456。您的參考編號爲012的總金額爲E 1250,00 ..」
現在我需要提取代碼'123456',每次都不一樣,但總是6位數。
如何從字符串中提取這6位數字?我能否以某種方式使用正則表達式?我需要確定,所以我不想在'code:'上分割。
編輯: 文本的其餘部分可能不同,但SMS中只有6位數字。
的regexpr爲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的正則表達式是否支持lookarounds。如果是這樣:
(?<!\d)\d{6}(?!\d)
編輯:它的確如此。 (感謝波希米亞)
的Java不支持看變通 – Bohemian 2012-01-04 13:04:41
爲什麼不乾脆用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位數字。
我編輯了我的問題。其餘的文本可以不同(之前或之後),所以這會是一個問題。 – 2012-01-04 18:30:43
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));
然而,這會發現6位數字的輸入_ – fge 2012-01-04 13:06:06
它你在搜索的字符串固定爲一個以上regexpr將默認找到的第一個匹配_anywhere – mana 2012-01-04 14:34:51
只有一次有6個數字在文本中,所以這解決了我的問題,謝謝! – 2012-01-04 18:35:06