2017-10-28 83 views
-1

ics文件:搜索字符串格式,直到<a href="https://wiki.gnome.org/Apps/Evolution" rel="nofollow noreferrer">evolution</a>产生匹配

BEGIN:VCALENDAR 
CALSCALE:GREGORIAN 
PRODID:-//Ximian//NONSGML Evolution Calendar//EN 
VERSION:2.0 
X-EVOLUTION-DATA-REVISION:2017-10-28T04:50:31.240215Z(0) 
BEGIN:VTIMEZONE 
TZID:/freeassociation.sourceforge.net/Asia/Kolkata 
X-LIC-LOCATION:Asia/Kolkata 
BEGIN:STANDARD 
TZNAME:IST 
DTSTART:19701014T230000 
TZOFFSETFROM:+0530 
TZOFFSETTO:+0530 
END:STANDARD 
END:VTIMEZONE 
BEGIN:VTODO 
UID:f13168013f7c8b9abc36c31e43028c34a3f40823 
DTSTAMP:20171019T025556Z 
SUMMARY:Trial 
DTSTART;TZID=/freeassociation.sourceforge.net/Asia/Kolkata: 
20171019T000000 
DUE;TZID=/freeassociation.sourceforge.net/Asia/Kolkata:20171030T000000 
PERCENT-COMPLETE:0 
CLASS:PUBLIC 
DESCRIPTION:Hello 
SEQUENCE:2 
CREATED:20171019T031330Z 
LAST-MODIFIED:20171028T045031Z 
CATEGORIES:Work 
END:VTODO 
END:VCALENDAR 

的问题是在该行20-23,其中:

DTSTART;TZID=/freeassociation.sourceforge.net/Asia/Kolkata: 
20171019T000000 
DUE;TZID=/freeassociation.sourceforge.net/Asia/Kolkata:20171030T000000 

所以,DTSTART的时间在下一行,而DUE的时间戳在同一行。因此,一个简单的python函数,如:

if line.startswith("DTSTART;TZID"): 
     line = next(finp) 
     dt = line.strip()[0:8] 

将无法​​为两者工作。这一个不适用于DUE,为此我必须另外做一个没有next的功能。

如何处理任何此类日期/时间等,而不考虑换行符?

+0

我不知道为什么否定投票给定的,但它的刺激性当别人管理的时候把负面投票,但不在乎回答或说出为什么它是一个糟糕的问题。 – BaRud

回答

-1

也许使用正则表达式将是你的情况下非常有用, 试试这个:

import re 
if line.startswith("DTSTART;TZID"): 
    line = next(finp) 
    dt = re.search('(.*)T.*', line).groups(1) 

if line.startswith("DTSTART;TZID"): 
    dt = re.search('.*\:(.*)T.*', line).groups(1) 

多数民众赞成在包裹(第一组)是在两种情况下的邮戳。

解码正则表达式; 。*匹配任何东西,直到明确指定的字符出现为止,这是因为换行符和给我们的“普通”字符串,所以在第一个场景'T'中。在第二个邮票是介于':'和'T'之间的日期。

使用字符串切片时,你不知道会变得困难,如果这个城市是加尔各答总等

+0

嗨,感谢您的回答,但请注意,您刚刚展示了我已经做过的事情。我不是要求正则表达式,但是如果有反正在DTSTART中避免'下一个'的话。 – BaRud

相关问题