解析使用dateutil

问题描述:

我试图从Python中的字符串与此代码的帮助解析多个日期多个日期,解析使用dateutil

from dateutil.parser import _timelex, parser 
a = "Approve my leave from first half of 12/10/2012 to second half of 20/10/2012 " 
p = parser() 
info = p.info 
def timetoken(token): 
    try: 
    float(token) 
    return True 
    except ValueError: 
    pass 
    return any(f(token) for f in (info.jump,info.weekday,info.month,info.hms,info.ampm,info.pertain,info.utczone,info.tzoffset)) 

def timesplit(input_string): 
    batch = [] 
    for token in _timelex(input_string): 
    if timetoken(token): 
     if info.jump(token): 
     continue 
     batch.append(token) 
    else: 
     if batch: 
     yield " ".join(batch) 
     batch = [] 
    if batch: 
    yield " ".join(batch) 

for item in timesplit(a): 
    print "Found:", item 
    print "Parsed:", p.parse(item) 

和代码从字符串作为第二次约会,并采取秒半给我这个错误,

raise ValueError, "unknown string format" 

ValueError: unknown string format 
当我改变“下半场”到“第三半”或“半来回”

那么它工作的所有罚款。

任何人都可以帮我解析这个字符串吗?

解析器无法处理"second"通过timesplit发现,如果将fuzzy参数去是True,它不会破坏,但也不会产生任何有意义的事。

from cStringIO import StringIO 
for item in timesplit(StringIO(a)): 
    print "Found:", item 
    print "Parsed:", p.parse(StringIO(item),fuzzy=True) 

出来:

Found: 12 10 2012 
Parsed: 2012-12-10 00:00:00 
Found: second 
Parsed: 2013-01-11 00:00:00 
Found: 20 10 2012 
Parsed: 2012-10-20 00:00:00 

你必须修复timesplitting或处理错误:

OPT1:

失去info.hmstimetoken

OPT2:

from cStringIO import StringIO 
for item in timesplit(StringIO(a)): 
    print "Found:", item 
    try: 
     print "Parsed:", p.parse(StringIO(item)) 
    except ValueError: 
     print 'Not Parsed!' 

出来:

Found: 12 10 2012 
Parsed: 2012-12-10 00:00:00 
Found: second 
Not Parsed! 
Parsed: Found: 20 10 2012 
Parsed: 2012-10-20 00:00:00 

如果你只需要日期,可以用正则表达式提取出来,并与日期的作品。

a = "Approve my leave from first half of 12/10/2012 to second half of 20/10/2012 " 

import re 
pattern = re.compile('\d{2}/\d{2}/\d{4}') 
pattern.findall(a) 
['12/10/2012', '20/10/2012']