【问题标题】:Extract DateTime from string从字符串中提取日期时间
【发布时间】:2020-03-27 19:51:51
【问题描述】:

当循环遍历 List<string> 中的元素时,我想提取第一个 日期时间

这是一个示例行,在这种情况下,月份是一位数,月份也可以是两位数,例如12 但不说 01。

string line = "\\\\SomeServer\\HTTP\\demo1\\index.cfm 4 KB CFM " + 
              "File 2/19/2019 3:48:21 PM " + 
              "2/19/2019 1:05:53 PM 2/19/2019 1:05:53 PM 5";

预期的结果是

2019 年 2 月 19 日下午 3:48:21

我在这里查看了各种正则表达式代码示例,以下是仅正确处理单个数字月份并且不返回日期的时间部分的示例(因为我不知道要使用什么模式)。

var line = "\\\\SomeServer\\HTTP\\FolderName\\index.cfm 4 KB CFM " +
           "File 02/19/2019 3:48:21 PM " +
           "2/19/2019 1:05:53 PM 2/19/2019 1:05:53 PM 5";

var match = Regex.Match(line, 
    @"\d{2}\/\d{2}\/\d{4}");

var dateValue = match.Value;
if (!string.IsNullOrWhiteSpace(dateValue))
{

    var dateTime = DateTime.ParseExact(dateValue, 
        "MM/dd/yyyy", 
        CultureInfo.CurrentCulture);

    Console.WriteLine(
        dateTime.ToString(CultureInfo.InvariantCulture));
}

最后,我在发布此问题时查看了推荐的问题精简版,并且几乎没有创建正则表达式的专业知识。我感谢任何建议和/或代码示例,让我朝着正确的方向前进。

【问题讨论】:

  • 请注意,当您将解析该字符串时,我想DateTime.ParseExact(dateTime, "MM/dd/yyyy H:m:s tt", CultureInfo.CurrrentCulture);,如果当前文化是非英语,它将失败。 CultureInfo.InvariantCulture 在任何情况下都可以使用。
  • @Jimi,谢谢,我已将解析更改为 ``` if (DateTime.TryParse(dateValue, out lineDateTime)) ``` 异常使用 out var 但这是一个冗长的解析方法.

标签: c# regex datetime find extract


【解决方案1】:

你可以使用

\b\d{1,2}/\d{1,2}/\d{4}\s\d{1,2}:\d{2}:\d{2}\s?[AP]M\b

请参阅regex demoRegex.Match 将为您提供第一场比赛。

详情

  • \b - 字边界
  • \d{1,2}/\d{1,2}/\d{4} - 一位或两位,/,一位或两位,/,四位
  • \s - 一个空格
  • \d{1,2}:\d{2}:\d{2} - 1 位或 2 位,:,2 位,:,2 位
  • \s? - 可选空格
  • [AP]M - AMPM
  • \b - 字边界。

【讨论】:

    猜你喜欢
    • 2020-08-14
    • 2011-03-31
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    相关资源
    最近更新 更多