文件名的正则表达式模式,如XX_XXXX_XXXX_DDMMYYYY

时间:2015-09-30 16:26:27

标签: c#

我正在从目录中检索一组文件。文件名的格式为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 _")的模式搜索将适合我之前给出的模式。 请帮忙。 感谢

2 个答案:

答案 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}

请注意,您需要在字符串末尾验证日期。