2013-01-12 21 views
3

我的編碼過程中我遇到,涉及解析這樣一個字符串一個問題:解析字符串封裝INT到包含其他數字數組被忽略

{15}有194個紅色氣球,{26}有23個貼圖,{40}有12個插孔,....

我的代碼涉及將句子和數字都拉成兩個單獨的數組。 我已經解決了使用*.Remove(0, 5)將句子解析到其自己的數組中的問題,以消除第一部分,該部分的問題是我必須確保文件始終寫入標準,{##}但涉及的地方卻不如我想要的那麼高雅,有時這個數字會是{3},我將被迫做出{3}。

由於還有字符串包含其他數字的機會,我無法簡單地先解析出整數。

int?[] array = y.Split(',') 
      .Select(z => 
      { 
       int value; 
       return int.TryParse(z, out value) ? value : (int?)null; 
      }) 
      .ToArray(); 

所以無論如何回手邊的問題,我需要能夠解析出「{##}」到每個具有其自己的元件的陣列。

回答

2

這裏有一個辦法做到這一點使用positive lookaheads/lookbehinds

string s = "{15} there are 194 red balloons, {26} there are 23 stickers, {40} there are 12 jacks"; 

// Match all digits preceded by "{" and followed by "}" 
int[] matches = Regex.Matches(s, @"(?<={)\d+(?=})") 
    .Cast<Match>() 
    .Select(m => int.Parse(m.Value)) 
    .ToArray(); 

// Yields [15, 26, 40] 
+0

,完美的工作謝謝。 – VincEclipsE

+0

我正在處理這個問題,並且遇到了一個新問題,因爲我需要合併鋸齒陣列,所以我嘗試修改此代碼,就像這樣..'int [] [] Odds = y.Split(':')。Select t => Regex.Matches(t,@「(?<= {)\ d +(?=})」)) .Cast () .Select(m => int.Parse(m.Value)) .ToArray();」用一個新的字符串作爲每個新數組之間的分隔符。它給我的錯誤「不能隱式轉換類型'int []'爲'int [] []' – VincEclipsE

+0

數組的額外維度是什麼?它聽起來不同,可能是一個新的問題,雖然。 –