C# 我已经尝试为日期制作正则表达式,所以请建议正确的方法
我试图使正则表达式匹配这种格式,如“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并返回该值。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
因此,使用正则表达式或不使用正则表达式都可以解决我的问题???只需将
[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();
}
}
}