2011-12-14 14 views
0

ビットを探している場合も含む - 私はいくつかの本当に醜いプログラミングを避けることを望んで、誰かがこれを行うための気の利いた方法を有することができると考えています...正規表現 - 「+」奇妙な質問の小数

私は現在、文字列の数字にマッチする正規表現、例えば "222"に取り組んでいます。場合によっては、これらの数値には小数点が含まれ、「222.5」、または「.5」の代わりにプラス記号に置き換えられます。 222+。

Regexまたは一般的なC#行を書いて、「+」記号を.5という数字の後に解釈できるという考えはありますか?ここに私が持っている現在のコードの例があります( '+'記号で何もしません)。

string match = Regex.Match(subject, @"\s*-?\d+").Value; 

答えて

1
string match = Regex.Match(subject, @"-?(\d+((\.\d+)|\+)?)|(\.\d+)").Value 
    .Replace("+", ".5"); 
+0

楽しい日 - thats素晴らしい。ありがとうございました – keynesiancross

+0

@keynesiancrossが判明しました。わずかなバグがありました。 –

+0

バグは何ですか?私はすぐに私のコードでそれを投げた... haha​​。 'または'(|)に大きな違いはありません....私はおそらく何かが欠けているでしょう。前のバージョンで@keynesiancrossの – keynesiancross

2

[OK]を、あなたは検索のための正規表現を使用している、私はこのようなプラスを見つけるためにあなたの正規表現を変更するであろうことを想定:\+はプラス記号と一致していることを

\s*-?\d+\+? 

注意と?はオプションです。

今、私は部品を「キャプチャ」にラップし、値を抽出します。

\s*(-?\d+)(\+)? 

括弧でマッチの構成部分を抽出することができます。

だから、今あなたが持っているでしょう:

var match = Regex.Match(subject, @"\s*(-?\d+)(\+)?"); 
var value = decimal.Parse(match.Groups[1].Value); 
value += match.Groups[2].Success ? 0.5M : 0.0M; 

あなたは「0.5」のような値または単に」0.5' と一致することができるようにする必要がある場合は、あなたのような何かに最終製品に\d+を変更することができますこの:

(?:\d*\.)?\d+ 
+0

これにはいくつかのバグがあります。 -5が5.0を返す。また、2行目にはカッコの並びがありません。 –

+0

@Yury:項目に小数点が含まれるとは言いませんでした。 –

+0

*時には、これらの数値に小数点が含まれます。「222.5」* –