0

我正在尝试在 fileSytem 和 Ftp 研究中使用 Regex 对象机器人过滤搜索。如果我在 Ftp 上运行此代码段,它可以工作,但如果我在本地 FileSystem 上运行它,它不会响应:

在 FTP 上

string[] filesArray = ftp.ListDirectory(@"/" + SrcPath + @"/").Where(fileName => Regex.IsMatch(fileName, /*@"^[a-zA-Z0-9\-]*?$"*/"(.*)"+ SrcMask, RegexOptions.IgnoreCase)).ToArray();

在本地文件系统上

 String[] files = Directory.GetFiles(SrcPath).Where(fileName => Regex.IsMatch(fileName, "(.*)" + *.pdf, RegexOptions.IgnoreCase)).ToArray() 

对 foreach 做同样的事情,我注意到当它遇到“none pdf”文件时,在 if 条件下,语句被锁定:

string input = "*.pdf";
Regex regx = new Regex("(.*)"+input); 
String[] filesName = Directory.GetFiles("c:\\temp\\").Select(fileName => new FileInfo(fileName).FullName).ToArray();
foreach(String s  in filesName)
{
    if (regx.IsMatch(s))
    {
        File.Copy(s, "C:\\temp\\files\\"+s.Split('\\').Last(), true);
        count++; 
    }
    Console.WriteLine(count);              
}
4

1 回答 1

1

简短的回答是

(.*)* 

当正则表达式无法匹配时,会导致回溯地狱。

摆脱不必要的 second *,或者最好只\.pdf$用于正则表达式。

于 2013-04-18T19:23:59.537 回答