文件名如XX_XXXX_XXXX_DDMMYYYY的正则表达式模式
本文关键字:XXXX 正则表达式 模式 DDMMYYYY 文件名 XX | 更新日期: 2023-09-27 18:15:15
我正在从目录中检索一组文件。文件名的模式为XX_XXXX_XXXX_DDMMYYYY。其中XX代表国家前缀。有效的前缀为IN、ID、SG、MY。下一组XXXX是固定的CCMS。下一组XXXX变化。我有下面的代码,我想优化。
string[] filePath = Directory.GetFiles(ConfigurationManager.AppSettings["InputFiles"]);
foreach (string inputfilepath in filePath)
{
try
{
if ((inputfilepath.ToUpper().Contains("HK_CCMS_CARDO_") || (inputfilepath.ToUpper().Contains("ID_CCMS_CARDO_")) || (inputfilepath.ToUpper().Contains("IN_CCMS_CARDO_")) ||
(inputfilepath.ToUpper().Contains("MY_CCMS_CARDO_")) || (inputfilepath.ToUpper().Contains("PH_CCMS_CARDO_")) || (inputfilepath.ToUpper().Contains("SG_CCMS_CARDO_")) ||
(inputfilepath.ToUpper().Contains("TH_CCMS_CARDO_")) || (inputfilepath.ToUpper().Contains("TW_CCMS_CARDO_"))))
{
// Do Something
}
}
我想用模式搜索替换每个inputfilepath.ToUpper(). contains ("HK_CCMS_CARDO_"),这将适合我之前给出的模式。请帮助。由于
不使用正则表达式,但这样做可以消除一些冗余:
var prefixes = new string[]{
"HK_CCMS_CARDO_", "ID_CCMS_CARDO_", "IN_CCMS_CARDO_",
"MY_CCMS_CARDO_", "PH_CCMS_CARDO_", "SG_CCMS_CARDO_"
};
foreach(string inputfilepath in filePath)
{
try
{
if(prefixes.Any((string prefix) => inputfilepath.ToUpper().StartsWith(prefix)))
{
// ...
}
}
}
如果我要使用正则表达式,我可能只是使用String.Join('|')
生成正则表达式字符串来连接这些部分并在末尾添加日期部分,但是由于您并没有真正尝试匹配格式,所以我认为上面的内容更清晰。
(IN|ID|SG|MY)_CCMS_('d|'w){5}_'d{8}
请注意,您需要验证字符串末尾的日期。