2011-12-16 44 views
3

如果我有一個過濾字符串像這樣(過濾器的FileDialog):解析過濾器列表的FileDialog

"Image Files (*.bmp, *.jpg)|*.bmp;*.jpg|All Files (*.*)|*.*" 

有沒有在C#的功能,讓我在這個過濾器的所有擴展名的列表?

這將是

"*.bmp", "*.jpg" and "*.*" 

回答

4

你可以用這個正規表示法做到這一點:

(?<Name>[^|]*)\|(?<Extension>[^|]*)\|? 

這裏是一個示例代碼:

var regex = new Regex(@"(?<Name>[^|]*)\|(?<Extension>[^|]*)\|?"); 
var matches = regex.Matches(@"Image Files (*.bmp, *.jpg)|*.bmp;*.jpg|All Files (*.*)|*.*"); 
foreach (Match match in matches) 
{ 
    Debug.Print("Name: '{0}' Extension:'{1}'", match.Groups["Name"].Value, match.Groups["Extension"].Value); 
} 
+0

所有的答案都很好,但我選擇了這個,因爲我有更多的需求,我可以用這個版本解決這個問題。 – MTR 2011-12-16 08:08:50

1

我不這麼認爲。但是,自己寫一個很容易。

public string[] getExtensions(string input) { 
    if (string.isNullOrEmpty(input) || input.indexOf('|') == -1) { 
     return null; 
    } 
    else { 
     List<string> returnValue = new List<string>(); 
     string[] parts = input.Split('|') 
     for(int x = 1; x < input.Length; x+=2) { 
      foreach(string extension in parts[x].Split(',')) { 
       returnValue.Add(extension); 
      } 
     } 
     return returnValue.ToArray(); 
    } 
}