2014-01-29 281 views
2

我從網頁返回下面的字符串得到一個數的第一個實例正則表達式從字符串

Order Number: 1509596 Customer Number: 8 

,但它也可能是

Order ID 1509596 Customer 8 

我想在我的方法使用正則表達式等等我只是返回訂單號,我在做

orderNumber.replaceAll("[^0-9]", "") 

但這顯然不起作用,因爲我然後有一個8我的訂單號碼。有人可以幫我,我只是訂單號碼,因爲我在reg ex垃圾!

該字符串將永遠是50個字符長,但訂單號是動態的,所以我不知道它會持續多久,是否有可能只返回字符串中的第一個數字?

+0

您應該可以使用「[0-9] +」正則表達式來匹配字符串中的第一個數字。 –

+0

對數字序列進行正則表達式匹配會更好,並選擇您想要的索引。如果你繼續這樣做的方式,這正則表達式可以工作...'客戶+ | [^ 0-9]' –

回答

5
String firstNumber = str.replaceAll("^\\D*(\\d+).*", "$1"); 
+0

我的答案稍微更一般的版本。 +1 – Keppil

+0

謝謝你的完美作品。 –

+0

沒問題。這種呼叫的關鍵在於你匹配整個輸入,同時捕獲目標並用捕獲的組替換, – Bohemian

1

我想不出一個單一的線,將做到這一點的,但下面應該工作:

String orderString = "Order Number: 1509596 Customer Number: 8"; 
Pattern p = Pattern.compile("[0-9]+"); 
Matcher m = p.matcher(orderString); 
if (m.find()) 
{ 
    String orderNr = m.group(); 
    System.out.println(orderNr); 
} 
+0

想不出如何做到這一點的一條線? [見這... muhahahaha](http://stackoverflow.com/questions/21427608/regex-getting-the-first-instance-of-a-number-from-a-string/21427741#21427741) – Bohemian

+0

你可以簡單地使用'字符串orderNr = m.group()' – BackSlash

+0

@BackSlash:謝謝,我想'組()時,有在正則表達式明確的組(使用'(..)')'只能使用。 –

1

如果你改變orderNumber.replaceAll("[^0-9]", "")

orderNumber.replaceAll("[^0-9]", ",")因此

你會得到,1509596,8作爲一個答案,

我認爲這可能有助於你解決答案。