文件名如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_"),这将适合我之前给出的模式。请帮助。由于

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

不使用正则表达式,但这样做可以消除一些冗余:

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}

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