我有以下正则表达式:
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)
请注意,如果我删除^和$,控制台会将文件名写入文件夹中
你应该用Reconciliationfile.Name.目前您使用的Reconciliationfile.FullName是为您提供文件的完整路径.
同样在正则表达式中你必须逃脱.,它应该是@"^TEST_\d{4}\.xml\.gz$"