2012-11-29 47 views
0

我需要幫助正則表達式從缺少小數的字符串中提取數字。提取無整數的整數

Input 
2 4.0 6.0 7 8 4.60 

Output 
2 7 8 

編輯:另一個跟進問題這對於正則表達式和Java。假設我想添加東西到我發現的東西(我真正想要的是將2 4.0 7.5並將其轉換爲2.0 4.0 7.5,意思是在沒有小數的情況下添加缺少的.0),我該怎麼做,仍然如此保持我的字符串不變的東西?

+6

代替正則表達式的,做一個'String.Split(」「)'您所選擇的語言。排除包含句點的結果數組中的那些元素。 –

+0

...或者用正則表達式'/ \ s +(\ d + \。\ d * \ s +)* /' – Bergi

回答

2

對於第二個問題: -

這裏是你的第二個要求的解決方案: -

String str = "2 4.0 6.0 7.5 8 4.60"; 
str = str.replaceAll("(?<=^|[ ])(\\d+)(?=$|[ ])", "$1.0"); 

System.out.println(str); // Prints 2.0 4.0 6.0 7.5 8.0 4.60 

對於第一個問題: -

您可以使用此正則表達式: -

(?<=^|[ ])(\\d+)(?=$|[ ]) 

這將匹配digits之後的任何序列,之後是space。此外,它會匹配字符串末尾的數字,並使用^$

這裏是實現: -

String str = "2 4.0 6.0 7 8 4.60"; 
    Pattern pattern = Pattern.compile("(?<=^|[ ])(\\d+)(?=[$ ])"); 

    Matcher matcher = pattern.matcher(str); 

    while (matcher.find()) { 
     System.out.print(matcher.group(1) + " "); 
    } 

輸出: -

2 7 8 
+0

@ m.buettner做一個分割。好的,我編輯了它。請檢查。 –

+2

我想你需要分別在'\ s | ^'中使用'\ s | $'來匹配第一個和最後一個數字 – Bergi

+0

@ m.buettner。是的,但如果這是downvote的原因,那顯然是不公平的。不過,我會添加正則表達式,而不用「前瞻」和「後退」。 –

3

與羅伯特·哈維的評論一起去,我會用空格分開它,然後遍歷結果找了」。 」。閱讀和維護比使用正則表達式更容易。

string[] splitStr = "2 4.0 6.0 7 8 4.60".split(' '); 
foreach(string s in splitStr){ 
    if(false == s.Contains(".")) 
     //do something 
} 
+1

如果輸入是'2 4.0 hallo spot你今天好嗎? 3 4.5 6'? –

+0

@Omega:在OP的要求中未指定。順便說一下,這是一個可愛的用戶名,但我看不到任何人能夠輕鬆地ping你。 –

+1

@RobertHarvey - 對,沒有在OP的問題中指定,輸入將只包含**數字...... –

0

我的版本:(?<![\.\d])\d+(?!\.\d+)