从字符串中提取日期时间

Extract DateTime from string

当遍历列表中的元素时<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";

预期的结果是

2/19/2019 3:48:21 下午

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

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));
}

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

您可以使用

\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 - 单词边界。