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

时间:2019-05-20 08:10:20

标签: regex string asp.net-core-2.0 c#-7.0

问题

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

但是我由于以下两个原因而无法读取ics文件:

  1. 我不太了解Regex。
  2. 我不知道如何通过字符串操作实现目标。

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

我希望每个事件在以后的阶段都可以成为一个类,这样我就可以读取数据并提出要呈现给最终用户的决定。

背景

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

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

不是代码,而是我的工作

这是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

所需结果

是使用字符串文本获取匹配项数组,以便我可以将其拆分成更多的内容并创建类。

免责声明

因为这是一个业余项目,所以我想挑战一下,不要使用插件或帮助库。但是,如果我能看到它们如何解决问题,那么感谢与这些链接。

2 个答案:

答案 0 :(得分:0)

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

我将Regex101.com用于正则表达式,希望对您有帮助

答案 1 :(得分:0)

正则表达式通常非常适合提取文本。但是在这种简单情况下,您可以尝试执行以下操作:

ICacheClient