0

我有一个 .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.

我错过了什么?任何指针都受到高度赞赏。

4

2 回答 2

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。

于 2013-02-13T16:18:47.780 回答
0

好的。解决了。我在这里找到了一些可以用来分割 ics 文件的东西。我对其进行了调整以使用类别而不是文件名中的摘要,然后根据类别合并单独生成的文件。我在所有文件中添加了常用的 ics 页眉和页脚,瞧,我有单独的日历文件。

于 2013-02-16T12:09:46.973 回答