文章

C# 通配符转正则

可以使用下面代码把通配符转正则字符串

public static class WildcardRegexString
{
    /// <summary>
    /// 通配符转正则
    /// </summary>
    /// <param name="wildcardStr"></param>
    /// <returns></returns>
    public static string GetWildcardRegexString(string wildcardStr)
    {
        Regex replace = new Regex("[.$^{\\[(|)*+?\\\\]");
        return replace.Replace(wildcardStr,
                   delegate (Match m)
                   {
                       switch (m.Value)
                       {
                           case "?":
                               return ".?";
                           case "*":
                               return ".*";
                           default:
                               return "\\" + m.Value;
                       }
                   }) + "$";
    }
}

文件经常是不需要区分大小写,所以需要写一个函数告诉用户,不需要区分大小写。

/// <summary>
/// 获取通配符的正则
/// </summary>
/// <param name="wildcarStr"></param>
/// <param name="ignoreCase">是否忽略大小写</param>
/// <returns></returns>
public static Regex GetWildcardRegex(string wildcarStr, bool ignoreCase)
{
    if (ignoreCase)
    {
        return new Regex(GetWildcardRegexString(wildcarStr));
    }
    return new Regex(GetWildcardRegexString(wildcarStr), RegexOptions.IgnoreCase);
}

License:  CC BY 4.0