如何使用正则表达式单独从任务中获取日期

时间:2015-12-03 01:19:01

标签: python regex

我试图从此任务中提取日期:

(C) 2015-02-18 {2013.06.04} Check Alibaba for suppliers +Company @Computer due:2015-02-17

目前,我正是这样做的:

def split_task(task_id):

     todo_list = get_todo_list()

     task = todo_list[int(task_id)-1]

     split_task = task.split(" ")

     task_id = split_task[0]

     task_dict = {}
     new_split_task = []

     for index,s in enumerate(split_task):

         flag = ""

         if re.search('[^:][0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])',split_task[index]):

             task_dict['creation_date']=split_task[index]
             flag=1

         if re.search('[:]([0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]))',split_task[index]):

             task = split_task[index]
             task_dict['due_date'] = task[4:]
             flag=1

        if re.search('({\d{4}.\d{2}.\d{2}})',split_task[index]):

             task_dict['mit'] = split_task[index]
             flag=1

我可以成功地抓住括号日期和到期日期,但我无法弄清楚如何以不会捕捉其他人的方式获得正常日期。

2 个答案:

答案 0 :(得分:2)

您可以匹配表达式中的空格:

# with the curly braces
re.search(r'\{\d{4}.\d{2}.\d{2}\}', text)

# with the spaces
re.search(r' \d{4}.\d{2}.\d{2} ', text)

# if you want to get the date, then capture it with brackets:
date = re.findall(r' (\d{4}.\d{2}.\d{2}) ', text)
print(date) # list of dates

请注意,如果要匹配文本中的花括号,则应该转义大括号。

另请注意"\n"r"\n"之间的区别。后者是反斜杠,后跟字母n,而不是换行符。

答案 1 :(得分:0)

我通过向过滤器添加额外的AND NOT来完成这项工作,如下所示:

if re.search('[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])',split_task[index]) and not re.search('[:]([0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]))',split_task[index]):

    task_dict['creation_date']=split_task[index]
    flag=1