2013-12-13 34 views
1

這是RegEx模式的固定代碼。這是完全正常工作。我想從XML文件中獲得相同的格式。每次我無法編輯代碼,所以只有我嘗試使用這種類型的方法。讀取XML並轉換爲RegEx字符串數組

Regex[] regPatterns = { new Regex(@"\[(.*?)\]"), 
         new Regex(@"\'_(.*?)\'") 
         }; 

示例XML是這裏

<?xml version="1.0" encoding="utf-8" ?> 
    <RegExPattern> 
     <Pattern name="DateFormat"> 
      @"\[(.*?)\]" 
     </Pattern> 
     <Pattern name="NumberFormat"> 
      @"\d+" 
     </Pattern> 
    </RegExPattern> 

樣品C#代碼是在這裏

regPatterns = ReadRegExPatterns(); 

private Regex[] ReadRegExPatterns() 
    { 
     using (XmlReader reader = XmlReader.Create("RegExFormats.xml")) 
      { 
       while (reader.Read()) 
       { 
        if (reader.IsStartElement()) 
        { 
         switch (reader.Name) 
         { 
          case "Pattern": 
           if (reader.Read()) 
           { 
            //Error Line 
            regPatterns = new Regex(reader.Value.Trim()); 
           } 
           break; 
         } 
        } 
       } 
      } 

     return regPatterns; 
    } 

我打轉換爲正則表達式[]格式,幫助我。

回答

0

首先,你沒有定義方法裏面的regPatterns變量,你需要定義它,因爲你正在做一個return regPatterns,它需要是同一類型比你的方法(Regex[])的回報。

但是創建一個返回數組的方法是一個相對糟糕的想法(它通過提供實現的細節來打破封裝),最好返回,例如,一個IEnumerable,它是「即將到來的」當在.Net中返回一些東西的集合時。

額外的好處,它使得可以使用關鍵字yield真正輕鬆實現你的方法:

private IEnumerable<Regex> ReadRegExPatterns() 
{ 
    using (XmlReader reader = XmlReader.Create("RegExFormats.xml")) 
    { 
     while (reader.Read()) 
     { 
      if (reader.IsStartElement()) 
      { 
       if (reader.Name == "Pattern") 
       { 
        if (reader.Read()) 
        { 
         yield return new Regex(reader.Value.Trim()); 
        } 
       } 
      } 
     } 
    } 
} 

希望這有助於。

相關問題