需要干净的正则表达式输出



我是regex的新手,无法解决问题。使用此代码,我需要提取以多种格式给出的日期。正则表达式代码给我额外的引号和逗号。是否有一种方法来删除这些和提取日期?

<标题>代码:
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')]

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

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

print "n".join(map(''.join, 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(';')]

最新更新