我需要幫助正則表達式從缺少小數的字符串中提取數字。提取無整數的整數
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),我該怎麼做,仍然如此保持我的字符串不變的東西?
我需要幫助正則表達式從缺少小數的字符串中提取數字。提取無整數的整數
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),我該怎麼做,仍然如此保持我的字符串不變的東西?
對於第二個問題: -
這裏是你的第二個要求的解決方案: -
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
@ m.buettner做一個分割。好的,我編輯了它。請檢查。 –
我想你需要分別在'\ s | ^'中使用'\ s | $'來匹配第一個和最後一個數字 – Bergi
@ m.buettner。是的,但如果這是downvote的原因,那顯然是不公平的。不過,我會添加正則表達式,而不用「前瞻」和「後退」。 –
與羅伯特·哈維的評論一起去,我會用空格分開它,然後遍歷結果找了」。 」。閱讀和維護比使用正則表達式更容易。
string[] splitStr = "2 4.0 6.0 7 8 4.60".split(' ');
foreach(string s in splitStr){
if(false == s.Contains("."))
//do something
}
如果輸入是'2 4.0 hallo spot你今天好嗎? 3 4.5 6'? –
@Omega:在OP的要求中未指定。順便說一下,這是一個可愛的用戶名,但我看不到任何人能夠輕鬆地ping你。 –
@RobertHarvey - 對,沒有在OP的問題中指定,輸入將只包含**數字...... –
我的版本:(?<![\.\d])\d+(?!\.\d+)
代替正則表達式的,做一個'String.Split(」「)'您所選擇的語言。排除包含句點的結果數組中的那些元素。 –
...或者用正則表達式'/ \ s +(\ d + \。\ d * \ s +)* /' – Bergi