2016-12-05 4 views
1

これについては複数のトピックを読んだことがありますが、それは分かりません。特定の文字列をintに変換する

私はこの特定のタイプの文字列フォーマットを持っています:8Y4H20M。 私は文字列にスペース

するvarカデナ= tiempo.ToUpperを()ことができますので、私は、これをやった初

Year=8 
Hours=4 
Minutes=20 

3つの貴様変数に取得する必要があります(トリム)。 // Saco todos los espacios que haya en las cadenas cadena = string.Join( ""、cadena.Split(default(string [])、StringSplitOptions.RemoveEmptyEntries));

var cont = 0; 
    //int dia = 0, hora = 0, minutos = 0; 

    string[] numbers = Regex.Split(cadena, @"\D+"); 
    foreach (string value in numbers) 
    { 
     if (!string.IsNullOrEmpty(value)) 
     { 
      if (cont == 0) 
      { 
       minutos += (Convert.ToInt32(value))*480; 
       cont++; 
      } 
      else if (cont == 1) 
      { 
       minutos += (Convert.ToInt32(value))*60; 
       cont++; 
      } 
      else if (cont == 2) 
      { 
       minutos += (Convert.ToInt32(value)); 
       cont++; 
      } 


     } 
    } 

たとえば、文字列が "8H7M"であるか、 "19Y" .I特定の文字を検索し、それらを変数に入れなければならない場合、これは機能しません。私は辞書にマッチの詳細情報を収集するために正規表現を理解するために小型かつ簡単に使用することをお勧め

おかげ

答えて

0

var result = Regex.Matches(s, @"(?<num>[0-9]+)\s*(?<unit>[mhy])", RegexOptions.IgnoreCase) 
    .Cast<Match>() 
    .ToDictionary(x => x.Groups["unit"].Value, m => m.Groups["num"].Value); 

regex demoを参照してください。 (?<num>[0-9]+)\s*(?<unit>[mhy])試合:

  • (?<num>[0-9]+)から1以上(+)桁([0-9])とグループに結果を置く "NUM"
  • \s* - 0+空白記号
  • (?<unit>[mhy])から3つの文字の1、 (使用されているフラグのため)大文字小文字を区別しない方法で:mhまたはy、グループ "unit"に入れます。

A simplified code demo

string s = "8Y4H20M 8H7M  8 h 7 M  19 y 19Y"; 
MatchCollection result = Regex.Matches(s, @"(?<num>[0-9]+)\s*(?<unit>[mhy])", RegexOptions.IgnoreCase); 
foreach (System.Text.RegularExpressions.Match m in result) { 
    Console.WriteLine("{0}/{1}", m.Groups["unit"].Value, m.Groups["num"].Value); 

出力:

Y/8 
H/4 
M/20 
H/8 
M/7 
h/8 
M/7 
y/19 
Y/19 
+0

それは私にエラーエラーエルTIPO 'DevExpress.Office.ISimpleCollection'1 ' を与えますが、アセンブリで定義されていますそれは参照されません。 'DevExpress.Office.v12.1.Core、Version = 12.1.4.0、Culture =ニュートラル、PublicKeyToken = b88d1754d700e49a'。 –

+0

このコード以外の問題を探すには、 'System.Text.RegularExpressions'のみを参照してください。私が提案する解決策は有効なC#コードです。 –

+0

部分文字列はどうですか?それで済ますことができますか? –

関連する問題