2017-11-11 6 views
0

以下、テキストから数字の値を抽出できるコードを用意しました。私は、文字列+12 is on same dayを持っている場合、私は、私はそれが-12を抽出したい-12 is on the same day,のような負の数ではなく、私はマイナス記号を抽出することができますどのように12テキストから負のシンボルを抽出する方法

を持っているのであれば、それはしかし12

を抽出しますか?

foreach (char c in alternativeAirportPrice.Text) 
{ 
    if (char.IsNumber(c)) 
    {      
     string test = "-12 on same day"; 
     string alternativeAirportPriceValue = string.Join("", test.ToCharArray() 
              .Where(x => char.IsDigit(x)).ToArray()); 
     return alternativeAirportPriceValue; 
    } 
} 
+1

コードはまったく安定していません。 "9は新しい11"であり、 "911"を返します。 –

+1

それは良い点です。 @ bruceybanditあなたは常にテキストの中に1つの数字だけがあることを知っていますか? – d219

+1

@SirRufo危険なコードが適切な番号を呼び出して呼び出すと、それは素晴らしい機能だと思います。 –

答えて

2

これは、質問の希望の結果に基づいています。あなたは、この目的のためにforeachループを必要としないことに注意してくださいだけでLINQで十分です:

-?\d+ 

これは数字の任意の文字列または続い-にマッチします:

string.Join("", test.Split(' ').Where(x => int.TryParse(x , out _)).ToArray()); 
return alternativeAirportPriceValue; 
5

あなたが正規表現パターンを使用することができます数字の列で

string text = "-12 on the same day"; 
var match = Regex.Match(text, "-?\\d+"); 
return match.Value; 

System.Text.RegularExpressionsにusingディレクティブを追加することを忘れないでください!

+0

私はそれが好きです。 Rufo先生が言っているように、最初のポスターが1つしかないことが分かっているかどうかによって異なります。 – d219

0

これを試してみてください:

public IEnumerable<int> ExtractNumbers(string text) 
{ 
    text += " "; 
    var temp = string.Empty; 
    for (var i = 0; i < text.Length; i++) 
    { 
     if (char.IsDigit(text[i])) 
     { 
      if ('-'.Equals(text[i - 1])) 
      { 
       temp += text[i - 1]; 
      } 
      temp += text[i]; 
     } 
     else if (temp.Length > 0) 
     { 
      yield return int.Parse(temp); 
      temp = string.Empty; 
     } 
    } 
} 

ライン@Sir Rufoで観察されるように、文字列は、その中に複数の番号を持っているあなたはケースを扱うことができますこの方法:

text += " "; 

ですがそこでは、数字が文字列の最後の位置にあるとき、ループが "else if"ブロックに当たるようにします。 "-12同じ日に123456"

関連する問題