Python 如何使用正则表达式分别从任务中获取日期

Python 如何使用正则表达式分别从任务中获取日期,python,regex,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(" ")

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

(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

我可以成功地获取括号内的日期和到期日,但我不知道如何以不捕获其他日期的方式获取正常日期。

我通过添加一个额外的而不是添加到筛选器来实现这一点,如下所示:

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

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

# 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,而不是换行符。

那么它怎么会失败呢?注意,我做了编辑,因为代码缺少一些部分。它只是没有捕捉到日期。我在regexr.com上查不到我今天晚些时候会再查一遍你这是什么意思?它不返回匹配的对象吗?在您的代码示例中,您没有对返回的match对象执行任何操作。我将获得
None
作为所有经过的匹配项。是的,我将使用
if
筛选匹配项,然后将匹配结果添加到
任务目录中的正确位置。而且,您使用
re.findall()
进行的编辑对我也不起作用。