如何捕获两个字符串值之间的文本?

How do i capture text between two string values?

问题

我有一个爱好项目,旨在通过从组中的个人日历请求 ics 文件来同步多个日历,以获得计划会议的最佳时间。安排会议的某种懒惰方式 :)

但由于两个原因我无法阅读 ics 文件:

  1. 我不太懂正则表达式。
  2. 而且我不知道如何通过字符串操作来实现我的目标。

ics 文件已经结构化,所以我知道我想从 BEGIN:VEVENT 开始并将该文本收集到 END:VEVENT

我希望每个事件在后期都成为 class,这样我就可以读取数据并做出呈现给最终用户的决定。

背景

我尝试了正则表达式:BEGIN:VEVENT(?:[\w\s\:\@\.\;\-\=\ä\å\ö\\,\/\#]*)END:VEVENT 但这不是一个非常有效的方法。因为它收集了所有的事件,而不是将它们分成不同的组。

我一直在使用 regexer.com 来测试我的正则表达式。

不是代码而是我的工作

这是 ics 文件中的一些文本:

BEGIN:VEVENT
DTSTART:20121220T180000Z
DTEND:20121220T190000Z
DTSTAMP:20190503T064840Z
UID:SomeHash@google.com
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;CN=Name;X-NUM-GUESTS=0:mailto:MailAddress
CREATED:20121212T061002Z
LAST-MODIFIED:20121212T061003Z
LOCATION:ALocation
SEQUENCE:1
STATUS:TENTATIVE
SUMMARY:SomeText
TRANSP:OPAQUE
CATEGORIES:http://schemas.google.com/g/2005#event
END:VEVENT
BEGIN:VEVENT
DTSTART:20121213T143000Z
DTEND:20121213T153000Z
DTSTAMP:20190503T064840Z
UID:SomeHash@google.com
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;CN=Name;X-NUM-GUESTS=0:mailto:MailAddress
CREATED:20121212T061146Z
LAST-MODIFIED:20121212T061146Z
LOCATION:ALocation
SEQUENCE:1
STATUS:TENTATIVE
SUMMARY:SomeText
TRANSP:OPAQUE
CATEGORIES:http://schemas.google.com/g/2005#event
END:VEVENT

期望的结果

是获取与字符串文本匹配的数组,以便我可以进一步拆分它并创建 classes。

免责声明

因为这是一个业余爱好项目,所以我想接受挑战而不是使用插件或帮助库。但是,如果我能看到它们如何解决问题,我们将不胜感激。

尝试使用 BEGIN:VEVENT([\s\S]*?)END:VEVENT

我使用 Regex101.com 作为正则表达式,希望这对您有所帮助

正则表达式通常非常适合提取文本。但在这个简单的例子中,你可以尝试这样的事情:

var preambleLenght = "BEGIN:VEVENT\r\n".Length;
var text = ics.Substring(preambleLenght, ics.LastIndexOf("\r\nEND:VEVENT") - preambleLenght);