3

私は文字列を持っています1.5(+1.2/-0.5)正規表現を使用して数値を抽出したい: {1.5, 1.2, 0.5}.

(私の計画は、文字列を、+/およびで分割すること-です。(andで分割すると問題なく分割され/ますが、 and も追加する+-、プログラムがクラッシュします。

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] 範囲を逆順に解析しています

4

2 に答える 2

8

ダッシュは、正規表現で角括弧内にある場合の特殊文字です。範囲を意味します:からまで[a-z]の任意の文字を意味します。あなたが書いたとき、それは実際には、または から までの任意の文字を意味します。このエラーは、ASCII 順序でが の前に来るため、文字範囲が無効であることに起因します。az[(/+-)](+))+[+-)]

これを修正するには、角かっこでダッシュを常に最初または最後にするか、バックスラッシュを付ける必要があります。

そして、私は同意します。おそらく、グローバル正規表現を使用して を選択し[0-9.]+、他のすべてを切り取るために分割するのではありません。

于 2012-05-11T08:18:29.427 に答える
2

+ のような記号をエスケープしようとしましたか?

そして、なぜRegExのようなものではないの/\d+\.?\d+/ですか? これはそれを分割しませんが、数値を返します。

于 2012-05-11T08:20:03.557 に答える