【问题标题】:C# Regular Expression - Does not seem to work consistentlyC# 正则表达式 - 似乎无法始终如一地工作
【发布时间】:2021-12-06 20:23:47
【问题描述】:

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

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

为什么这不起作用?如果有更好的方法来完成这个...谢谢分享?

谢谢!

蒂姆·P

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    我假设你在问为什么这不匹配:

    t4_systx2_03oct2021_0001_2359_scs
    

    问题在于您的正则表达式的这一部分:

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

    这是在集合comp|disk|scs 中查找恰好出现四次的任意字符。这可能匹配结尾 comp,但也可以轻松匹配结尾 ccccksidscss 等。

    试试这个:

    (comp|disk|scs)
    

    正如@41686d6564 在 cmets 中指出的那样,您使用匹配月份的模式也有同样的问题。代替[jan|feb|...]{3},使用(jan|feb|...)

    完整的正则表达式:

    ^(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
    

    【讨论】:

    • [jan|feb|...] 也是如此。
    • 有趣 - 我从 [jan|feb|...] 和 [comp | disk ... ] 仍然不匹配。您的评论澄清了正在发生的事情-这使我能够解决问题-谢谢!我更改了表达式,现在字符串正确匹配 3 和 4 alpha 模式:^(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]{4})|([scs]{3}))\b
    • 那个正则表达式对我来说仍然不正确。它将匹配aaa 之类的月份和ccc 之类的结尾(因为您使用的是[] 和])。这是你想要的吗?
    • 这就是我最终得到的结果:'''@"^(t4_((?:[a-zA-Z]{5}[0-9]))_((? :2?[0-9]{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})_(?:([az]{3})|([az ]{4})|([az]{5})|([az]{6})|([az]{7})|([az]{8})|([az]{9}) )\b";''' -- 第 6 组中的匹配可能是 3-9 个字符的任何字母组合。正则表达式似乎适用于我测试的所有情况......对于你的问题,需要模式匹配的日期格式是 nnmmmYYYY - 虽然它是一团糟,但我不知道更好的方法来处理日期。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多