2

リモート サービスから受け取った文字列から 10 進数を取得したいと考えています。

私の問題は、「+」または「-」のいずれかで始まる文字列に小数点のみが必要なことです。

これが私の現在の解決策です:

string text = "+123.23 foo 456.34 bar -789.56";
List<string> decimals = Regex.Split(text, @"[^0-9\.]+").Where(
                             c => c != "." && c.Trim() != string.Empty).ToList();

foreach (var str in decimals)
{
    Console.WriteLine(str); 
}

// Output:
//           
// 123.23 
// 456.34
// 789.56
//
// Desired output:
//
// 123.23
// -789.56

私は正規表現をよく知らないので、より適切なパターンについて助けてください。

4

2 に答える 2

2

Split非数字の ting からMatching の数字に切り替えました。これにより、必要な結果が得られます。

string text = "+123.23 foo 456.34 bar -789.56";
List<string> decimals = Regex.Matches(text, @"[+\-][0-9]+(\.[0-9]+)?")
                          .Cast<Match>().Select(m => m.Value).ToList();

foreach (var str in decimals)
{
    Console.WriteLine(decimal.Parse(str));
}
于 2013-10-22T20:50:59.087 に答える
2

試す(\+|\-)[0-9\.]+

string strRegex = @"(\+|\-)[0-9\.]+";
Regex myRegex = new Regex(strRegex);
string strTargetString = @"+123.23 foo 456.34 bar -789.56";

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {

  }
}
于 2013-10-22T20:51:25.900 に答える