解析FileDialog的过滤器列表

时间:2011-12-16 07:28:25

标签: c# .net

如果我有这样的过滤字符串(FileDialog的过滤器):

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

C#中是否有一个函数可以为我提供此过滤器中所有扩展的列表?

这将是

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

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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();
    }
}