我正在从目录中检索一组文件。文件名的格式为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()。包含(" HK_CCMS_CARDO _")的模式搜索将适合我之前给出的模式。 请帮忙。 感谢
答案 0 :(得分:0)
不使用正则表达式,但这样的东西可能会删除一些冗余:
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('|')
生成正则表达式字符串以连接各个部分并在结尾添加日期部分,但是因为您并未真正尝试匹配一种格式,就像许多已知的前缀一样,我觉得上面的内容更清楚。
答案 1 :(得分:0)
(IN|ID|SG|MY)_CCMS_(\d|\w){5}_\d{8}
请注意,您需要在字符串末尾验证日期。