繁体   English   中英

需要清理正则表达式输出

[英]Clean regex output required

我是正则表达式的新手,无法解决问题。 使用此代码,我需要提取以多种格式给出的日期。 正则表达式代码给了我额外的引号和逗号。 有没有办法删除那些并仅提取日期?

代码:

import re

text = '''04/20/2009; 04/20/09; 4/20/09; 4/3/09
Mar-20-2009; Mar 20, 2009; March 20, 2009; Mar. 20, 2009; Mar 20 2009;
'''

xx = '(\\d{1,2}\[/-\]\\d{1,2}\[/-\]\\d{2,4})|(\[1|2\]\\d{3})'

matches = re.findall(xx, text)
matches

输出:

[('04/20/2009', ''),
 ('04/20/09', ''),
 ('4/20/09', ''),
 ('4/3/09', ''),
 ('', '2009'),
 ('', '2009'),
 ('', '2009'),
 ('', '2009'),
 ('', '2009')]

这并不能完全回答问题,但可以考虑使用dateutil模块,它已经有一个内置选项来解析许多不同的格式:

import dateutil

text = '''04/20/2009; 04/20/09; 4/20/09; 4/3/09
Mar-20-2009; Mar 20, 2009; March 20, 2009; Mar. 20, 2009; Mar 20 2009;
'''

# Remove whitespace and split the dates by semicolons
text = text.strip('\n;').replace('\n', ';')

# Parse each date individually
dates = [dateutil.parser.parse(date) for date in text.split(';')]

您可以使用 join 方法将匹配列表中的元素连接成一个字符串。

例如,您可以使用以下代码从匹配列表中提取日期字符串并将它们连接成一个字符串:

date_strings = [date[0] or date[1] for date in matches]
date_string = ' '.join(date_strings)

这将创建一个新列表 date_strings,它只包含匹配列表中的日期字符串,然后使用 join 方法将列表中的元素连接成一个字符串,由一个空格字符分隔。

据我了解,你正在生成一个元组列表,但你想要的只是一个文本字符串,它是结果的垂直列表?

您可以通过首先将各个元组内容与空字符串连接在一起,然后将结果字符串列表与换行符连接在一起来实现:

print "\n".join(map(''.join, matches));

04/20/2009
04/20/09
4/20/09
4/3/09
2009
2009
2009
2009
2009

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM