Regex以这种格式匹配特定的文本和日期:MM/dd/yyyy

本文关键字:日期 文本 MM yyyy dd 格式 Regex | 更新日期: 2023-09-27 18:16:50

.net regex:

使用这个来匹配任何日期MM/dd/yyyy:

(?='d)^(?:(?!(?:10'D(?:0?[5-9]|1[0-4])'D(?:1582))|(?:0?9'D(?:0?[3-9]|1[0-3])'D(?:1752)))((?:0?[13578]|1[02])|(?:0?[469]|11)(?!'/31)(?!-31)(?!'.31)|(?:0?2(?=.?(?:(?:29.(?!000[04]|(?:(?:1[^0-6]|[2468][^048]|[3579][^26])00))(?:(?:(?:'d'd)(?:[02468][048]|[13579][26])(?!'x20BC))|(?:00(?:42|3[0369]|2[147]|1[258]|09)'x20BC))))))|(?:0?2(?=.(?:(?:'d'D)|(?:[01]'d)|(?:2[0-8])))))([-.'/])(0?[1-9]|[12]'d|3[01])'2(?!0000)((?=(?:00(?:4[0-5]|[0-3]?'d)'x20BC)|(?:'d{4}(?!'x20BC)))'d{4}(?:'x20BC)?)(?:$|(?='x20'd)'x20))?((?:(?:0?[1-9]|1[012])(?::[0-5]'d){0,2}(?:'x20[aApP][mM]))|(?:[01]'d|2[0-3])(?::[0-5]'d){1,2})?$

但是需要匹配的是:

Package.Variables[User::ProcessStartDateInput].Properties[Value];MM/dd/yyyy
Package.Variables[User::ProcessStartDateInput]. properties [Value];总是相同的

我尝试将静态文本添加到正则表达式中,但它不起作用。

如何做到这一点?

谢谢!

Regex以这种格式匹配特定的文本和日期:MM/dd/yyyy

如果不使用regex:

var str = "Package.Variables[User::ProcessStartDateInput].Properties[Value];12/10/2009";
var datePart = str.Substring(str.IndexOf(";") + 1);
var date = DateTime.ParseExact(datePart, "MM/dd/yyyy", CultureInfo.InvariantCulture);

假设您的字符串始终具有相同的格式(日期在;之后,之后没有任何内容)

正则表达式对于静态文本来说有点过头了。这样更容易维护,而且很可能性能更好。

您的尝试不起作用,因为您忘记了转义非常重要的regex模式。

您可以尝试以下操作:

var subject = "Package.Variables[User::ProcessStartDateInput].Properties[Value];12/14/2014";
var regex = new Regex(Regex.Escape("Package.Variables[User::ProcessStartDateInput].Properties[Value];")+ @"(?<date>'d{2}/'d{2}/'d{4})");
var match = regex.Match(subject);
if(match.Success)
{
    var datePart = match.Groups["date"].Value;
    DateTime dt;
    if(DateTime.TryParseExact(datePart,"MM/dd/yyyy",CultureInfo.InvariantCulture,DateTimeStyles.None, out dt))
    {
        //In the right format, and also a valid date.
    }
}

此正则表达式将匹配模式并捕获日期。如果需要,可以使用。net函数来验证日期。

Package'.Variables'[User::ProcessStartDateInput']'.Properties'[Value'];('d{2}/'d{2}/'d{4})