【发布时间】:2011-03-25 03:05:19
【问题描述】:
我编写了一个正则表达式,将文件路径解析为不同的组(DRIVE、DIR、FILE、EXTENSION)。
^((?<DRIVE>[a-zA-Z]):\\)*((?<DIR>[a-zA-Z0-9_]+(([a-zA-Z0-9_\s_\-\.]*[a-zA-Z0-9_]+)|([a-zA-Z0-9_]+)))\\)*(?<FILE>([a-zA-Z0-9_]+(([a-zA-Z0-9_\s_\-\.]*[a-zA-Z0-9_]+)|([a-zA-Z0-9_]+))\.(?<EXTENSION>[a-zA-Z0-9]{1,6})$))
我用 C# 做了一个测试。当我要测试的路径正确时。结果很快,这是我所期望的。
string path = @"C:\Documents and Settings\jhr\My Documents\Visual Studio 2010\Projects\FileEncryptor\Dds.FileEncryptor\Dds.FileEncryptor.csproj";
=> 好的
但是当我尝试使用我知道不匹配的路径进行测试时,如下所示:
string path = @"C:\Documents and Settings\jhr\My Documents\Visual Studio 2010\Projects\FileEncryptor\Dds.FileEncryptor\Dds.FileEncryptor?!??????";
=> 错误
当我调用这部分代码时测试冻结
Match match = s_fileRegex.Match(path);
当我查看我的进程资源管理器时,我看到进程 QTAgent32.exe 挂在我的处理器的 100% 处。什么意思?
【问题讨论】:
-
您在验证之前是否考虑过parsing the path?
-
为什么不使用 Path 类中的有用方法?无需使用正则表达式来提取此信息。
-
RegEx 确实是错误的方式。我仍然想知道为什么这个 RegEx 会杀死 regexr.com :>
标签: c# regex performance