3
如果我有一个过滤字符串像这样(过滤器的FileDialog):解析过滤器列表的FileDialog
"Image Files (*.bmp, *.jpg)|*.bmp;*.jpg|All Files (*.*)|*.*"
有没有在C#的功能,让我在这个过滤器的所有扩展名的列表?
这将是
"*.bmp", "*.jpg" and "*.*"
如果我有一个过滤字符串像这样(过滤器的FileDialog):解析过滤器列表的FileDialog
"Image Files (*.bmp, *.jpg)|*.bmp;*.jpg|All Files (*.*)|*.*"
有没有在C#的功能,让我在这个过滤器的所有扩展名的列表?
这将是
"*.bmp", "*.jpg" and "*.*"
你可以用这个正规表示法做到这一点:
(?<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);
}
我不这么认为。但是,自己写一个很容易。
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();
}
}
所有的答案都很好,但我选择了这个,因为我有更多的需求,我可以用这个版本解决这个问题。 – MTR 2011-12-16 08:08:50