C# 使用正则表达式的zip文件模式匹配

C# 使用正则表达式的zip文件模式匹配,c#,regex,C#,Regex,下面的zip文件需要使用它所在的模式进行检查,或者不在目录中。如何将模式与正则表达式匹配 压缩文件: TestReport-20140311_18121024-BWSI MGMT-74482677-00f0-49ea-9330-f60738da4bc0.zip 要匹配的模式: TestReport-{YYYYMMDD_HHmmssff}-[BWSI MGMT]-[UniqueId].zip 这里, UniqueId是74482677-00f0-49ea-9330-f60738da4bc0如果

下面的zip文件需要使用它所在的模式进行检查,或者不在目录中。如何将模式与正则表达式匹配

压缩文件:

TestReport-20140311_18121024-BWSI MGMT-74482677-00f0-49ea-9330-f60738da4bc0.zip
要匹配的模式:

TestReport-{YYYYMMDD_HHmmssff}-[BWSI MGMT]-[UniqueId].zip
这里,


UniqueId是
74482677-00f0-49ea-9330-f60738da4bc0

如果你真的想偷懒,你可以用一行正则表达式:

Regex rx("TestReport-(?<year>\d{4})(?<month>\d{2})(?<day>\d{2})_(?<hours>\d{2})(?<minutes>\d{2})(?<seconds>\d{2})(?<fractions>\d{2})-(?<machine>.*?)-(?<guid>[a-f\d]{8}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{12}).zip", RegexOptions.IgnoreCase);
Regex-rx(“TestReport-(?\d{4})(?\d{2})(?\d{2})(?\d{2})(?\d{2})(?\d{2})(?\d{2})-(?.*)-(?[a-f\d]{8}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{4}-[a-f}-[a-f\d}-[a-f}-[a-f\d]-[a-f}-[a-f\d]-[a-f]12}.regions”);

但是,您也可以在给定的间隔分割名称,假设名称一定是常量/以该格式。

此正则表达式将完成此操作:

(?i)TestReport-\d{8}_\d{8}-[a-z\s]+?-[a-f\d]{8}-(?:[a-f\d]{4}-){3}[a-f\d]{12}.zip
请注意,它不会检查日期值是否实际为有效日期,只检查其数字位置是否正确

  • (?i)
    关闭区分大小写功能
  • \d{8}\d{8}
    匹配日期
  • [a-z\s]+?
    匹配
    BWSI管理
    。我不确定这是否总是这根绳子。如果是,则可以替换为
    BWSI\sMGMT
  • -[a-f\d]{8}-(?:[a-f\d]{4}-{3}[a-f\d]{12}
    与唯一ID匹配。
    (?:)
    是非捕获组

要验证什么?需要根据上述目录中给出的模式检查zip文件是否存在一次,我认为使用
Split
x.Parse
比使用正则表达式更好。请不要在问题标题中包含有关语言的信息,除非没有它就没有意义。标签就是为了这个目的。你的正则表达式需要有多大的扩展性?例如,MachineName(SI)是与值匹配还是也必须与模式匹配?如果您在运行时不知道MachineName(SI),那么MachineName(SI)的格式化规则是什么?我假设您将在文件名列表上运行正则表达式,并且只返回匹配结果。