C# 用于标识有效文件路径和文件名的正则表达式太慢

C# 用于标识有效文件路径和文件名的正则表达式太慢,c#,regex,filepath,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(file

我有一个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\ThisisAllongBadFileName”


处理过程需要几分钟。有更好的方法吗?

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

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

我决定简单地接受任何不以斜杠结尾的文件路径都是有效的,而不是试图监督合法文件名。

我决定简单地接受任何不以斜杠结尾的文件路径都是有效的,而不是试图监督合法文件名。

中的一个解决方案也有什么问题,WIndows文件名不需要以扩展名结尾。请提供有效和无效的示例。说路径错误…无法提供足够的信息。请停止尝试使用字符串或正则表达式验证文件名。验证文件名的唯一方法是尝试创建它,并查看它是否在运行时引发异常。几分钟?您在什么上运行此操作?为什么不使用File.Exists(字符串路径)?中的一个解决方案有什么问题?另外,WIndows文件名不需要以扩展名结尾。请提供有效和无效的示例。说路径错误…无法提供足够的信息。请停止尝试使用字符串或正则表达式验证文件名。验证文件名的唯一方法是尝试创建它,并查看它是否在运行时引发异常。几分钟?您在什么上运行此操作?为什么不使用File.Exists(字符串路径)?