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