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

Ale*_*lex 0 c# regex

我有以下正则表达式:

TEST_(\d{4}).xml.gz
Run Code Online (Sandbox Code Playgroud)

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

TEST_2015.xml.gz
Run Code Online (Sandbox Code Playgroud)

我确信这可以通过Regex测试程序运行,并在我的C#文件中返回一个匹配项.

这个正则表达式也将匹配

sTEST_2015.xml.gz
Run Code Online (Sandbox Code Playgroud)

要么

TEST_2015.xml.gzc
Run Code Online (Sandbox Code Playgroud)

等等

这不是我想要的.

所以我补充一下

^TEST_(\d{4}).xml.gz$
Run Code Online (Sandbox Code Playgroud)

现在哪个会匹配我想要的.

到目前为止都很好.

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

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

我也尝试过:

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\$");
Run Code Online (Sandbox Code Playgroud)

等,但他们没有工作.

我错过了什么

我已经查看了谷歌和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();

}
Run Code Online (Sandbox Code Playgroud)

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

Ulu*_*rov 5

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

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