正则表达式识别有效的文件路径和文件名太慢

时间:2018-07-10 22:15:23

标签: c# regex filepath

我有一个C#应用程序,该应用程序需要识别给定的字符串是否是有效的Windows文件路径,该路径以带有扩展名的文件名结尾。目前我有:

public static bool IsValidWindowsFilePathWithFileName(string filepath)
{
    string scriptFilePathPattern = @"^[A-Za-z]:(\\\w+(\s*\w+)*)*(\\\w+(\s*\w+)*\.[a-zA-Z]\w*)$";
    return Regex.IsMatch(filepath, scriptFilePathPattern);
}

通常正常。但是,如果我输入的内容以长字符串结尾,例如

  

“ C:\ Windows \ System32 \ ThisIsALongBadFileName”

需要几分钟的时间来处理。有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

请尽可能删除*(零个或多个),并替换为+ 1个或多个。使用的每个*都会增加解析器的回溯。如果您知道不存在条件,请不要将其放入...中,使用+

答案 1 :(得分:1)

我决定只接受不以斜杠结尾的任何文件路径都是有效的,而不是尝试管理合法的文件名。