2012-05-11 91 views
2

我有一個字符串1.5(+1.2/-0.5)。我想用Regex來提取數值:{1.5, 1.2, 0.5}Regex.Split加號和減號

我的計劃是將字符串拆分爲(,+,/-。當我分裂(/,它分裂確定,但如果我也加+-,然後程序崩潰。

string[] foo = Regex.Split("1.5(+1.5/-0.5)", @"(?=[(/)])"); 
// OK 

string[] foo = Regex.Split("1.5(+1.5/-0.5)", @"(?=[(/+-)])"); 
// Exception catched 

而捕獲的異常是:

System.ArgumentException:解析 「(?= [(/ + - )])」 - [XY]範圍在 相反的順序

回答

7

短劃線是正方括號內的方括號內的特殊字符。這意味着一個範圍:[a-z]意味着從az的任何字符。當您編寫[(/+-)]時,它實際上意味着(+)中的任何字符。錯誤來自於這樣一個事實,即在)之前的ASCII碼中出現+,所以字符範圍[+-)]無效。

要解決這個問題,短劃線必須始終在括號內出現,或者需要反斜槓。

我同意,我可能會使用全局正則表達式來挑選[0-9.]+,而不是一分爲二。

+0

哦,我忘了逃跑。 +1 – KMC

+0

我使用了[0-9。] +,但省略了數值。 – KMC

+0

你是什麼意思,省略數值?它表示(+,/ - 和) – Amadan

1

試圖逃避像+?

爲什麼不是RegEx /\d+\.?\d+/?這不會分割它,而是返回數字。

+0

你的代碼崩潰 – KMC

+0

我的錯 - 錯過了一個d –

+0

err ..它返回整個字符串unplitted .. – KMC