2013-10-04 44 views
-1

我有一些提取文本的List<String>,我想驗證列表是否符合此條件(可能包含多次該模式,並且每個列表中的項目都是):在列表中插入文本<String>休耕模式

0  // A zero should always be here when two numbers are together 
\r\n // New line 
number // any positive number 
\r\n // New line 
number // Positive number, .length < = 4 
\r\n // New line 

我想要的是驗證第一個零始終存在,如果沒有,插入它以匹配先前的列表格式。

text --> Insert a zero after this text 
\r\n 
4 
\r\n 
1234 
\r\n 

要...

text 
\r\n 
0  --> the inserted zero 
\r\n 
4 
\r\n 
1234 
\r\n 

所以,我知道我可以使用.Insert(index, string)一個循環裏面,其實我使用的是用於循環列表有很多醜陋的驗證

public Regex isNumber = new Regex(@"^\d+$"); 

// When the list is been build and a possible match is found call this method: 
private void CheckIfZeroMustBeAdded(List<string> stringList) 
{ 
    int counter = 0; 

    for (int i = stringList.Count - 1; i > 1; i--) 
    { 
     if (stringList[i].Equals(Environment.NewLine)) 
     { 
      // Do nothing 
     } 
     else if (counter == 2) 
     { 
      if (!stringList[i].Equals("0")) 
      { 
       stringList.Insert(i, string.Format("{0}{1}", Environment.NewLine,"0")); 
       break; 
      } 
     } 
     else if (ExtractionConst.isNumber.Match(stringList[i]).Success && !stringList[i].Equals("0") 
     { 
      // There are two numbers together 
      counter++; 
     } 
     else 
     { 
      break; 
     } 
    } 
} 


但是..是否有任何有效的方法來做到這一點?

+0

安置自己的企圖代碼,或表示你如何去了解它的一個片段,否則你可能會得到一個答案類似你已經實現了什麼。 – jmstoker

+0

請直接在問題中包含代碼,而不是將其隱藏在粘貼鏈接後面。 –

+0

或者沒有答案和大量downvotes ... – Brian

回答

1

你正在使用Regex最好的解決辦法,試試這個:

//Add using System.Text.RegularExpressions first 
string input = ....;// It's up to you 
string output = Regex.Replace(input,"([^0])(\r\n([1-9]|\\d{2,})\r\n([1-9]|\\d{2,4})\r\n)","$1\r\n0$2");