我需要使用正则表达式从文本字符串中提取日期

时间:2018-08-30 06:06:29

标签: c# regex

我需要更改我的正则表达式,以便能够提取日期而无需任何文本。目前,正则表达式提取日期和时间,但前提是日期和时间是紧随其后的。如果它们之间有文本,则代码与该文本匹配。

我的正则表达式:

( nodeComplete && count ){
  #print $0
  #print count;
  for (i = 0; i < count; i++) {print array1[i];};
  nodeComplete=0;
  count=0;
}

该句子应该看起来像这样:

string pattern = @"(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]|(?:Jan|Mar|May|Jul|Aug|Oct|Dec)))\1|(?:(?:1|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2]|(?:Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:29(\/|-|\.)(?:0?2|(?:Feb))\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9]|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep))|(?:1[0-2]|(?:Oct|Nov|Dec)))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})(?:[\D]*)(?<time>\d{1,2}\:\d{2}\s(?:A|P)M)";

正则表达式应匹配:

1)Hello, meet me 5/1/2019 at 6:32 PM and then 5/2/2019 7:32 PM bye.

2)5/1/2019

3)6:32 PM

4)5/2/2019

当前,输出结果如下:

7:32 PM
  

通知

     

在5/1/2019到6:32之间的 at 已被接受,不应接受。

请让任何答案都与我的正则表达式有关,因为这是使用它的必要条件。

1 个答案:

答案 0 :(得分:0)

这是我的第一个C#程序,不要残酷:

using System;
using System.Text.RegularExpressions;

namespace myApp
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = "Hello, meet me 5/1/2019 at 6:32 PM and then 5/2/2019 7:32 PM bye.";
            Regex word = new Regex(@"(([0-9]{1,2}:[0-9]{1,2}\s[A-Z]{2})|([0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}))");
            MatchCollection mc = word.Matches(input);
            foreach (Match m in mc)
            {
                Console.WriteLine(m);
            }
        }
    }
}

输出:

5/1/2019
6:32 PM
5/2/2019
7:32 PM