re.findall()不返回任何结果



我正试图在python中解析我的日历条目。我写了一个AppleScript,它会抓取我想要的日历条目,并将它们作为字符串返回。一个例子。。。

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Microsoft Corporation//Outlook for Mac MIMEDIR//EN
METHOD:PUBLISH
BEGIN:VTIMEZONE
TZID:Dublin, Edinburgh, Lisbon, London
X-ENTOURAGE-CFTIMEZONE:Europe/London
X-ENTOURAGE-TZID:8
BEGIN:STANDARD
RRULE:FREQ=YEARLY;INTERVAL=1;BYSECOND=0;BYMINUTE=0;BYHOUR=2;BYDAY=-1SU;BYM
ONTH=10
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
DTSTART:16011001T020000
END:STANDARD
BEGIN:DAYLIGHT
RRULE:FREQ=YEARLY;INTERVAL=1;BYSECOND=0;BYMINUTE=0;BYHOUR=1;BYDAY=-1SU;BYM
ONTH=3
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
DTSTART:16010301T010000
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
...

我将其存储在字符串cal_string中。

我现在想将每个VTIMEZONE元素提取到它自己的字符串中,所以我使用了re.findall((,但它没有返回任何结果。。。

my_timezones = re.findall(r'BEGIN:VTIMEZONE(.*?)END:VTIMEZONE', cal_string)
print("timezones: ", my_timezones)

这只是打印timezones: []

我试过在findall中加/不加前面的r,那没什么区别。我还通过在test_string = 'BEGIN:VTIMEZONE test test test END:VTIMEZONE'上运行验证了该表达式,它正确地返回了test test test

您需要使用re.DOTALL标志,如果没有它,.只匹配换行符(演示(

my_timezones = re.findall(r'BEGIN:VTIMEZONE(.*?)END:VTIMEZONE', cal_string, flags=re.DOTALL)

或内联(演示(

my_timezones = re.findall(r'(?s)BEGIN:VTIMEZONE(.*?)END:VTIMEZONE', cal_string)

最新更新