代码之家  ›  专栏  ›  技术社区  ›  Brandon

如何允许字符串中特定位置的字符

  •  0
  • Brandon  · 技术社区  · 5 年前

    我在分析一个日期。问题是,我的正则表达式忽略了任何字母,因为我想避免 01-28-2019 UTC 或主日期以外的任何字母。现在,当日期的格式像我刚才列出的那样时,它可以正常工作,但是当我们得到一个格式像 28-JAN-19 .

    var sourceValue = Regex.Replace("28-JAN-19", @"[A-Za-z]", "");
    var parsed = DateTime.Parse(sourceValue);
    

    我需要解析的日期可以是几种不同的格式。是否可以使用正则表达式来处理此问题?如果是这样,需要什么调整来修剪 xx-xx-xx 是绳子的一部分吗?

    28—JAN-19 28-01-19 28-JAN-19 13:15:00 28-01-19 13:15:00 28-01-2019 13:15:00

    2 回复  |  直到 5 年前
        1
  •  1
  •   Icemanind    5 年前

    此regex应与您提供的所有示例匹配:

    [0-9]{2}-([A-Za-z]{3}|[0-9]{2})-[0-9]{2,4}( [0-9][0-9]?:[0-9][0-9]?:[0-9][0-9])?
    

    不过,根据您的示例,它确实做了一些假设。首先,它假设所有日期都将以两位数的日期开始。它还假定您的月份缩写为3个字母长。它还假定您的小时、分钟和秒都是2位数长。如果这些假设有误,请告诉我。

    这里是一个 fiddle

        2
  •  1
  •   stimms    5 年前

    正则表达式可能不是您的最佳选择。如果您知道可能会遇到的完整格式集,那么可以将常规的datetime.parseexact与格式字符串一起使用。检查 FormatException 以了解您是否成功分析了日期。如果你的月份使用的是英语缩写,那么一定要通过英语文化。

    DateTime.ParseExact("28-JAN-19", "dd-MMM-yy", new CultureInfo("en"));