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

C# 我需要使用正则表达式从文本字符串中提取日期,c#,regex,C#,Regex,我需要修改我的正则表达式,以便能够在没有任何文本的情况下提取日期。目前,正则表达式提取日期和时间,但前提是日期和时间紧随其后。如果它们之间有文本,则代码与该文本匹配 我的正则表达式: 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|

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

我的正则表达式:

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)
2019年5月1日

2)
6:32 PM

3)
2019年5月2日

4)
7:32 PM

目前,输出是这样的:

Parsed 'Hello, meet me 5/1/2019 at 6:32 PM and then 5/2/2019 7:32 PM bye.' to 5/1/2019 at 6:32 PM.
Unable to convert 'Hello, meet me 5/1/2019 at 6:32 PM and then 5/2/2019 7:32 PM bye.' to a date.
Parsed 'Hello, meet me 5/1/2019 at 6:32 PM and then 5/2/2019 7:32 PM bye.' to 5/2/2019 7:32 PM.
Converted 'Hello, meet me 5/1/2019 at 6:32 PM and then 5/2/2019 7:32 PM bye.' to 05/02/2019 19:32:00.
注意

2019年5月1日至6时32分之间的时间间隔被接受,不应该被接受

请让任何答案与我的正则表达式有点关联,因为使用它是一项要求。

这是我的第一个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

在这个问题上,你被告知要打破交替,单独测试每一件,直到一切正常。你还没有从这个问题中得到任何建议。这与你前几天发布的问题完全相同。。。请不要弄乱这个论坛@TimBiegeleisen,我无法打破它。它只能完全起作用。“我试过了,但没用。”TimBiegeleisen实际上我的最后一个问题是想在我解决的同一个字符串中识别另一个日期。这个问题有点不同,你可以在这里测试你的正则表达式:据我所知,没有办法进行“单一选择”,删除里面的东西(在你的例子中是“at”)。在我看来,正则表达式太复杂,也太不稳定。尽量简化它,并分别解析日期和时间,而不是作为单个块。
5/1/2019
6:32 PM
5/2/2019
7:32 PM