【问题标题】:Regex on hyphened string? C# [duplicate]连字符字符串上的正则表达式? C# [重复]
【发布时间】:2014-07-04 11:49:15
【问题描述】:

我正在尝试将文件名参数与正则表达式匹配以进行验证。数字后面的连字符有问题...

字符串:Article_RAR_Scout_13-03-14.pptx

正则表达式:

private bool IsValidFileName(string FileName)
    {
        if (Regex.IsMatch(FileName, @"^Article[A-Z]{3}_Scout_[0-31]-[0-12]-[0-99]\.pptx$"))
        {
            return true;
        }
        else
        {
            throw new Exception("Please provide a correct file name (e.g. Drillinginfo_WAF_Scout_13-03-14.pptx");
        }                     
    }

【问题讨论】:

  • 您的问题不仅仅是匹配连字符。您将无法将您的号码匹配为 [0-31]、[0-12]。和 [0-99] 不是有效的字符类。我建议您寻找 RegEx 来匹配日期,因为这似乎是您正在尝试做的事情。例如,Need regular expression for validating date in dd-MMM-yyyy format
  • 在 regexr.com 上检查您的正则表达式,这很有帮助:)
  • @CodeCaster 我不同意这个副本,前提是这里的 OP 问题比标题大得多。匹配日期可能有更好的重复。
  • @psubsee2003 那么“这个正则表达式不起作用,为我修复它”应该被关闭,因为它太宽泛了。此正则表达式的每个子问题都已在此站点上解决,请随时查找解决 OP 问题的其他问题并将它们链接到 cmets。
  • @CodeCaster 并不反对。我从来没有说过它不是太宽泛或不应该关闭(因此我没有重新投票),我只是指出 OP 的问题不是连字符而是匹配日期。

标签: c# regex


【解决方案1】:

在字符类中 0 到 9 [0-9] 只可能,0 到 31 [0-31] 不可能。那是您的正则表达式的问题,而不是连字符的问题。你的正则表达式是,

^Article_[A-Z]{3}_Scout_(?:0[1-9]|[1-2][0-9]|3[01])-(?:0[1-9]|1[012])-(?:[1-9][0-9]|0[1-9])\.pptx

DEMO

【讨论】:

  • 啊,我是个白痴。正则表达式新手,感谢您的帮助。
  • @Hardgraf 你也忘了在文章后面加下划线。
  • 现在,我的正则表达式将匹配您的字符串。
猜你喜欢
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 2011-02-19
  • 1970-01-01
相关资源
最近更新 更多