2012-05-11 27 views
2

私には文字列1.5(+1.2/-0.5)があります。私は数値{1.5, 1.2, 0.5}を抽出するためにRegexを使用したいと思います。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]は、aからzまでの任意の文字を意味します。 [(/+-)]と書いたときには、実際には(、または+から)までの任意の文字を意味します。エラーは、ASCIIの順序で)+の前に来るので、文字範囲[+-)]は無効です。

これを修正するには、大括弧で囲むか、逆スラッシュする必要があります。

私はおそらく、[0-9.]+を選ぶためにグローバル正規表現を使い、それ以外のものは分割しないことに同意します。

+0

ああ、私は逃げるのを忘れました。 +1 – KMC

+0

[0-9。] +を使用しましたが、数値を省略しています。 – KMC

+0

数値を省略してどういう意味ですか? – Amadan

1

+のような記号を逃れようとしましたか?

RegExのように/\d+\.?\d+/のような理由はありませんか?これは分割されず、数値が返されます。

+0

あなたのコードがクラッシュする – KMC

+0

私の欠点は、d –

+0

が間違っています..それは完全な文字列を返しません.. – KMC

関連する問題