2013-05-29 82 views
1
翻一番

我的應用程序崩潰似乎在「格式不對」,我有這樣的:轉換部分與正則表達式

Match m = Regex.Match(value, "[0-9]+[.[0-9]+]?"); 
double number = Convert.ToDouble(m.Value); 
return number; 

點就是讓這樣的字符串值:114.6W, 120.6W.到值我可以排序。 我寫的函數是假設將任何字符串變成9999.9999的double值,但是它在Convert.ToDouble()上崩潰。說錯了輸入格式?

+0

爲什麼不能分類「114.6W」和「120.6W」? – paul

+0

我想我可以,但我想使它成爲一個數字值,然後排序.. – ganjan

+0

@paul [字符串「114」是<「14」和<「24」](http://ideone.com/ uMhnSS),所以如果OP實際上需要按值排序,則不能簡單地按字符串排序。 – Kiril

回答

2

也許.是不是你正在使用的文化小數點分隔符。嘗試指定InvariantCulture在解析時:

double number = Convert.ToDouble(m.Value, CultureInfo.InvariantCulture); 
2

問題是與你的正則表達式:它應該閱讀

[0-9]+(\.[0-9]+)? 

[.[0.9]+](這是我在所有很驚訝解析)是一個字符類尋找在以下集中的任何字符:一個點,開右括號,0到9或加號。

+0

在C#中我得到「無法識別的轉義字符」。正則表達式給我一個頭痛 – ganjan

+0

用什麼?您的原始正則表達式還是提議的正則表達式? – fge

0

必須用括號代替方括號

Match m = Regex.Match(value, @"[0-9]+(?:\.[0-9]+)?"); 
0

如果保證始終是十進制數字,後跟一個字母,則:

var word = "120.6W"; 
var d = Decimal.Parse(word.Substring(0,word.Length-1)); 
0

嘗試這兩個正則表達式,你可能需要測試和調整您的需求

這個人會抓住所有的數字,包括.,但只有當後跟一個W¯¯(不會搶W)

(?i)\d+\.\d+(?=w) 

這個人會抓住所有的數字,無論什麼後

\d+\.\d+ 

,或者如果您的數據集只由數字加一個字母,並沒有在前面或之後,請執行@保羅指出,只是去掉最後一個字符

+0

請注意,有一個陷阱:.NET中的'\ d'將匹配_any UTF-8 digit_。它不限於0-9。 – fge

相關問題