使用正则表达式消除文件中的块(iCal文件中的分类事件)

时间:2013-02-13 15:08:19

标签: regex windows icalendar non-greedy editpad

我有一个.ics文件,我想根据事件类别创建单独的新.ics文件(我不能让egroupware只导出一个类别的事件,我想根据类别创建新的日历)。我想要的方法是反复删除所有事件,但只删除一个类别的事件,然后使用EditPad Lite 7(Windows)保存文件。

我正在努力使正则表达式正确。 。+?仍然过于贪婪并且否定字符串(例如,消除一个类别中的所有事件)也不起作用。

样品

    BEGIN:VEVENT
    DESCRIPTION:Event 2
    END:VEVENT
    BEGIN:VEVENT
    DESCRIPTION:Event 3
    CATEGORIES:Sports
    END:VEVENT
    BEGIN:VEVENT
    DESCRIPTION:Event 4
    END:VEVENT

正则表达式BEGIN:VEVENT.+?CATEGORIES:Sports.+?END:VEVENT应仅匹配体育赛事,但它会捕获从该类别后的第一个BEGIN到第一个END的所有内容。

编辑:否定不起作用:BEGIN:VEVENT.+?((?!CATEGORIES:Sports).).+?END:VEVENT

我错过了什么?任何指针都非常受欢迎。

2 个答案:

答案 0 :(得分:0)

我想删除或忽略换行符,因为你的正则表达式并不关心它们。

我只对CATEGORIES

后的比赛进行了更正
BEGIN:VEVENT.+?CATEGORIES:Sports.*?END:VEVENT
                                 ^
                               Zero or more

你的正则表达式的第一部分看起来不错,也许EditPad中的正则表达式引擎并不是那么好。 尝试使用不同的编辑器或脚本语言(如Eclipse或perl或Notepad +或Notepad2)

您可以拆分输入然后grep匹配的体育赛事

@sportevents = grep /Sports/, split /END:VEVENT/, $input
map $_.="END:VEVENT", @sportevents

这是perl,也许你可以从EditPad启动一个脚本来实现它 第二行只是恢复在分割期间被剥离的END:VEVENT。

答案 1 :(得分:0)

行。解决了它。我发现了here可以用来分割ics文件的东西。我调整它以使用文件名中的类别而不是摘要,然后根据类别合并单独生成的文件。我在所有文件中添加了常用的ics页眉和页脚,瞧,我有各自的日历文件。