我正在尝试使用 Sublime Text 作为编辑器来清理和合并一些旧的日历文件 (x.ics)。打开文件会得到一个长文件,如下所示。我想删除(即什么都不替换)文件中提及生日的所有条目 (VEVENT),并保留所有其他条目,因此我使用正则表达式作为一种方法。
我设法匹配了从 BEGIN:VEVENT 到 END:VEVENT 的行,但是我无法设置表达式来仅过滤其中包含生日的匹配项/VEVENT。
我现在拥有的是这个表达式:BEGIN:VEVENT(.|\n)*?(Birthday)(.|\n)*?END:VEVENT\n
。显然,这不是正确的表达式,因为它匹配从 BEGIN 到 END 就在它找到 Birthday 之后,而不匹配单个 VEVENT。
有人可以帮我找到解决方案吗?将不胜感激!
BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:2009
X-WR-TIMEZONE:Europe/Amsterdam
X-WR-CALDESC:
BEGIN:VEVENT
DTSTART:20110606T170500Z
DTEND:20110614T121000Z
DTSTAMP:20140108T203731Z
UID:CSVConvert0127bd7e37d8feb5e1daaa909729c2ba
CREATED:19000101T120000Z
DESCRIPTION:
LAST-MODIFIED:19700101T000000Z
LOCATION:Amsterdam
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Study
TRANSP:OPAQUE
END:VEVENT
.
.
.
BEGIN:VEVENT
DTSTART;VALUE=DATE:20110704
DTEND;VALUE=DATE:20110705
DTSTAMP:20140108T203731Z
UID:CSVConvert02f7a0b537b60e5601035a356dfd6a06
CREATED:19000101T120000Z
DESCRIPTION:
LAST-MODIFIED:19700101T000000Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Mark's Birthday
TRANSP:TRANSPARENT
END:VEVENT
END:VCALENDAR
最佳答案
我认为你需要添加一个 lookahead 来防止它越界:
BEGIN:VEVENT([\s\S](?!BEGIN:VEVENT))+?Birthday[\s\S]+?END:VEVENT
注意:我不是 ST 用户,不知道它是否支持。
关于正则表达式:无法找出表达式来匹配具有单个事件的行并且仅匹配包含特定单词的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21032018/