如何使用正则表达式更新重复规则

问题描述 投票:0回答:1

我有 RFC 2445 指定格式的重复规则,我需要更新开始日期和结束日期。以下是一些示例:

DT开始:20240422T000000Z 规则:频率=每日;间隔=1;直到=20240427T235959Z

DT开始:20220826T040000Z 规则:频率=每日;间隔=1;直到=20220826T040000Z 开始时间:20220501T000000Z RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=SU;UNTIL=20230114T235959Z 开始时间:20220930T040000Z 规则:频率=每日;间隔=1;直到=20220930T040000Z

由于我找不到任何具有此功能的库,因此我计划创建一个函数来更新开始日期和结束日期。

我创建了以下函数

 private static string UpdateRecurrenceStartDate(DateTime startDate, DateTime endDate, string recurrence)
    {
        var pattern = @"(DTSTART:[0-9]{8}T[0-9]{6}Z).*?(UNTIL=[0-9]{8}T[0-9]{6}Z)";
        var updatedRecurrence = Regex.Replace(recurrence, pattern, $"DTSTART:{startDate.ToString("yyyyMMddTHHmmssZ")} UNTIL:{endDate.AddDays(1).AddSeconds(-1).ToString("yyyyMMddTHHmmssZ")}");
        
        return updatedRecurrence;
    }

开始日期和结束日期未更新,这不起作用

c# .net regex icalendar rrule
1个回答
0
投票

看起来您使用的正则表达式模式可能无法正确捕获日期。

您的函数的以下修订版对其进行调整以正确捕获日期:

private static string UpdateRecurrenceStartDate(DateTime startDate, DateTime endDate, string recurrence)
{
    var pattern = @"(DTSTART:[0-9]{8}T[0-9]{6}Z).*?(UNTIL=[0-9]{8}T[0-9]{6}Z)";
    var updatedRecurrence = Regex.Replace(recurrence, pattern, $"DTSTART:{startDate.ToString("yyyyMMddTHHmmssZ")} UNTIL:{endDate.ToString("yyyyMMddTHHmmssZ")}");
            
    return updatedRecurrence;
}

我还从

AddDays(1).AddSeconds(-1)
中删除了
endDate
,因为它似乎没有必要。

© www.soinside.com 2019 - 2024. All rights reserved.