c#正则表达式-似乎不一致地工作



Microsoft .NET c#正则表达式:

@"^(t4_(?:[a-zA-Z]{5}[0-9])_(?:2?[0-3]{2}|1?[0-9])[jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec]{3}(?:[0-9]{4}))_([0-9]{4})_([0-9]{4})_([comp|disk|scs]){4}\b";

我希望搜索的文件名一致命名如下:

TraceLog_somename_other.log          -- should not match
t4_systx2_03oct2021_0001_2359_comp   -- Match
t4_systx2_03oct2021_0001_2359_disk   -- Match
t4_systx2_03oct2021_0001_2359_scs    -- does not match

目标是通过正则表达式"mask"扫描目录具有特定文件名签名的文件的。对所有文件使用相同的签名。尝试匹配模式似乎是一种方法。

为什么这不能工作?如果有更好的方法来做到这一点……谢谢分享!

谢谢!

Tim p

我想你是在问为什么这不匹配:

t4_systx2_03oct2021_0001_2359_scs

问题是你的正则表达式的这一部分:

([comp|disk|scs]){4}

查找集合comp|disk|scs中任意字符恰好出现四次。这可能匹配结尾的comp,但它也可以很容易地匹配结尾的cccc,ksid,scss等。

试试这个:

(comp|disk|scs)

正如@41686d6564在评论中指出的那样,您在用于匹配月份的模式上遇到了同样的问题。用(jan|feb|...)代替[jan|feb|...]{3}

完全正则表达式:

^(t4_(?:[a-zA-Z]{5}[0-9])_(?:2?[0-3]{2}|1?[0-9])(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)(?:[0-9]{4}))_([0-9]{4})_([0-9]{4})_(comp|disk|scs)b

相关内容

  • 没有找到相关文章

最新更新