2016-12-05 38 views
1

我已閱讀過有關此的多個主題,但我無法得到它。將特定的字符串轉換爲int

我有這種特定類型的字符串格式:8Y4H20M。 我需要獲得3個型動物變量

Year=8 
Hours=4 
Minutes=20 

我第一次這樣做了,因爲字符串可以有空格

VAR卡德納= tiempo.ToUpper()修剪()。 (「」,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」,這不起作用。我必須搜索特定的字符並將它們放入變量中。

感謝

回答

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]) - 1的3個字母,以不區分大小寫的方式(由於使用的標誌):m,hy,放入組「單元」。

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

它給我一個錯誤錯誤\t \t 3埃爾TIPO 'DevExpress.Office.ISimpleCollection'1 ' 在組件定義的它沒有被引用。 'DevExpress.Office.v12.1.Core,Version = 12.1.4.0,Culture = neutral,PublicKeyToken = b88d1754d700e49a'。 –

+0

尋找此代碼之外的問題,它只引用'System.Text.RegularExpressions'。我建議的解決方案是有效的C#代碼。 –

+0

子串呢?可以做到這一點? –