我试图从此任务中提取日期:
(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
我可以成功地抓住括号日期和到期日期,但我无法弄清楚如何以不会捕捉其他人的方式获得正常日期。
答案 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