我有一个.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
。
我错过了什么?任何指针都非常受欢迎。
答案 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页眉和页脚,瞧,我有各自的日历文件。