c#regex添加插入符号和美元符号

时间:2015-10-05 09:43:26

标签: c# regex

我有以下正则表达式:

TEST_(\d{4}).xml.gz

哪个匹配以下格式的字符串:

TEST_2015.xml.gz

并且我确信这是有效的,因为我通过Regex测试器运行它,并在我的C#文件中返回一个匹配。

此正则表达式也将匹配

sTEST_2015.xml.gz

OR

TEST_2015.xml.gzc

这不是我想要的。

所以我添加

^TEST_(\d{4}).xml.gz$

现在可以根据需要进行匹配。

到目前为止一切都很好。

我的问题是,当我尝试将其添加到C#Regex匹配时,该模式不再匹配,如下所示:

var FileNameRegex = new Regex(@"^TEST_(\d{4}).xml.gz$");

我也尝试过:

var FileNameRegex = new Regex(@"(^)TEST_(\d{4}).xml.gz($)");

var FileNameRegex = new Regex(@"^(TEST_(\d{4}).xml.gz)$");

var FileNameRegex = new Regex(@"\^TEST_(\d{4}).xml.gz\$");

等,但他们没有工作。

我错过了什么。

我查看了Google和SO,并在C#中找到了与这些符号相关的问题,但我找到的解决方案都没有解决我的问题。

...

这是一个完整的程序:

static void Main(string[] args)
{
    string sReconciliationFileFolder = ConfigurationManager.AppSettings["ReconciliationFileLocation"];
    DirectoryInfo sReconciliationFileDirectory = new DirectoryInfo(sReconciliationFileFolder);

    foreach (var Reconciliationfile in sReconciliationFileDirectory.GetFiles("*.gz"))
    {
        var FileNameRegex = new Regex(@"^TEST_(\d{4}).xml.gz$");
        Match validFileName = FileNameRegex.Match(Reconciliationfile.FullName);

        if (validFileName.Success)
        {
            Console.WriteLine(Reconciliationfile.FullName);

        }
    }

    Console.WriteLine("FINISHED");
    Console.ReadLine();

}

请注意,如果我删除^和$,控制台会将文件名写入文件夹

1 个答案:

答案 0 :(得分:5)

您应该使用Reconciliationfile.Name。目前,您使用Reconciliationfile.FullName为文件提供完整路径

同样在正则表达式中你必须逃避.,它应该是@"^TEST_\d{4}\.xml\.gz$"