Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我已经尝试为日期制作正则表达式,所以请建议正确的方法_C#_Regex - Fatal编程技术网

C# 我已经尝试为日期制作正则表达式,所以请建议正确的方法

C# 我已经尝试为日期制作正则表达式,所以请建议正确的方法,c#,regex,C#,Regex,我试图使正则表达式匹配这种格式,如“4月12日”或“6月23日”,或继续采取整个月,如1月,2月,3月,…12月 在这个正则表达式中,前两位始终是数字,后三位仅从12个月(如1月至12月)提取,并且前两位不超过31。 而且,在这两个正则表达式之间的某个时间,格式包含“12 Apr”“12/Apr”“12/Apr”,所以我们需要通过所有上述条件的正则表达式 字符串类似于“hello 12/may 789”,因此从这里我只想要12/may,我制作下面的正则表达式 有时也可能是“hello 12/xy

我试图使正则表达式匹配这种格式,如“4月12日”或“6月23日”,或继续采取整个月,如1月,2月,3月,…12月

在这个正则表达式中,前两位始终是数字,后三位仅从12个月(如1月至12月)提取,并且前两位不超过31。

而且,在这两个正则表达式之间的某个时间,格式包含“12 Apr”“12/Apr”“12/Apr”,所以我们需要通过所有上述条件的正则表达式

字符串类似于“hello 12/may 789”,因此从这里我只想要12/may,我制作下面的正则表达式

有时也可能是“hello 12/xyz 789”,所以这次正则表达式不匹配任何东西,因为xyz不匹配一月到十二月的任何月份格式

所以也需要通过这个条件

我尝试\b((0?[1-9]|[12]\d | 3[01])[.-\]?[a-zA-Z]{3})\b正则表达式来解决这个问题,但是当字符串为“hello 12/may 789”时,它通过了所有条件。这也会在5月12日返回。

但当字符串为“hello 12/xyz 789”时,不满足我的正则表达式。我的字符串也匹配12/xyz并返回该值。


因此,使用正则表达式或不使用正则表达式都可以解决我的问题???

只需将
[A-Za-z]{3}
替换为
jan | feb | mar | | | dec

@"(?i)\b((0?[1-9]|[12]\d|3[01])[ \\.-/]?(jan|feb|mar|apr|may|ju[ln]|aug|sep|oct|nov|dec))\b"
但请注意,我可以修改为2月份最多28天,但regex不计入闰年。所以不要用正则表达式解析日期。

Trt这个

/\b(?:0[\d]|1[\d]|2[\d]|30|31)+(?: |-|\/)(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/gim

您可以使用
DateTime.TryParseExact
通过拆分输入字符串来解析“dd/MMM”和“dd-MMM”格式的日期

它不允许2月和其他月份的日期分别大于31和29

如果你提供了一年,你可以考虑闰年,否则将考虑到今年。

和月份部分,将使用“MMM”缩写几个月,如果你想考虑整个月份的字母,你可以使用“MMMM”(用Topn3和<代码>如果约束)。 更多关于:


注意:我没有使用正则表达式。但这是解决您的问题的另一个简单选项。

您可以尝试
DateTime.TryParseExact
,如我在回答中所述
using System;
using System.Globalization;

namespace MyCOnsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            string pattern1 = "dd/MMM";
            string pattern2 = "dd-MMM";
            DateTime parsedDate;
            string input = "hello 12/May 789";//your string
            string[] results = input.Split(new string[] { " " }, StringSplitOptions.None);

            foreach (var result in results)
            {
                //pattern1
                if (DateTime.TryParseExact(result, pattern1, CultureInfo.InvariantCulture,
                                          DateTimeStyles.None, out parsedDate))
                    Console.WriteLine("Converted '{0}' to {1:d} by pattern1.",
                                      result, parsedDate);
                //pattern2
                else if (DateTime.TryParseExact(result, pattern2, CultureInfo.InvariantCulture,
                                      DateTimeStyles.None, out parsedDate))
                    Console.WriteLine("Converted '{0}' to {1:d} by pattern2.",
                                      result, parsedDate);
                else
                    Console.WriteLine("Unable to convert '{0}' to a date and time.",
                                      result);
            }

            //splitted values
            foreach (string s in results)
                Console.WriteLine(s);

            Console.ReadLine();

        }
    }
}