RegEx模式未显示匹配项

时间:2010-06-29 15:51:39

标签: c# regex

我有以下代码:

public void DriveRecursion(string retPath)
    {
        string pattern = @"[~#&!%\+\{\}]+";

        Regex regEx = new Regex(pattern);

        string[] fileDrive = Directory.GetFiles(retPath, "*.*", SearchOption.AllDirectories);
        List<string> filePath = new List<string>();
        List<string> filePaths = new List<string>();


        dataGridView1.Rows.Clear();
        try
        {
            foreach (string fileNames in fileDrive)
            {
                SanitizeFileNames sw = new SanitizeFileNames();


                if (regEx.IsMatch(fileNames))
                {
                    string fileNameOnly = Path.GetFileName(fileNames);
                    string pathOnly = Path.GetDirectoryName(fileNames);

                    DataGridViewRow dgr = new DataGridViewRow();
                    filePath.Add(fileNames);
                    dgr.CreateCells(dataGridView1);
                    dgr.Cells[0].Value = pathOnly;
                    dgr.Cells[1].Value = fileNameOnly;
                    dataGridView1.Rows.Add(dgr);
                    //filePath.Add(fileNames);
                    filePaths.Add(fileNames);
                    paths.Add(fileNames);
                    //sw.FileCleanup(filePaths);

                }

                else
                {
                    continue;
                    //DataGridViewRow dgr2 = new DataGridViewRow();
                    //dgr2.Cells[0].Value = "No Files To Clean Up";
                    //dgr2.Cells[1].Value = "";
                }

            }

        }
        catch (Exception e)
        {
            StreamWriter sw = new StreamWriter(retPath + "ErrorLog.txt");
            sw.Write(e);

        }

    }

我试图完成的是我的应用程序递归地钻进用户指定的驱动器/文件夹(通过FolderBrowserDialog)并通过我的if语句。如果文件包含我的正则表达式模式中定义的任何字符,它将输出到我的datagridview。如果没有,则不要在datagridview上显示它。

由于某种原因,我的代码似乎拿起了文件夹中的所有文件 - 而不仅仅是我的RegEx模式中具有字符的文件。我已经看了很长一段时间了,我不确定为什么会发生这种情况。任何人都有任何想法,也许我没有抓到?

3 个答案:

答案 0 :(得分:2)

“\”将被视为方括号内的文字,而不是转义字符。这些可能与您的文件路径匹配。

尝试:

string pattern = @"[~#&!%+{}]+";

答案 1 :(得分:1)

是的,您已经使用了转义字符,并指定使用@符号

按字面读取字符串

基本上@“cfnejbncie”意味着从字面上理解整个字符串。即你没有逃避任何事情,就像整个字符串被逃脱一样。所以/实际上被用作正则表达式的一部分。

答案 2 :(得分:1)

嗯。这对我来说很好:

var regEx = new Regex(@"[~#&!%\+\{\}]+");
var files = Directory.GetFiles(retPath, "*.*", SearchOption.AllDirectories);

foreach (var fileName in files.Where(fileName => regEx.IsMatch(fileName)))
{
    Console.WriteLine(fileName);
}