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