【发布时间】:2019-03-20 01:20:32
【问题描述】:
我想从字符串中提取月份和年份。例如:
如果我有一个字符串From August 2017 - September 2018,那么我应该将'August 2017' 和'September 2018' 分成两组。我尝试了以下方法:
import re
regex = r'(\b\d{1,2}\D{0,3}\b-)?\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(Nov|Dec)(?:ember)?)\D?(\d{1,2}\D?)?\D?((19[7-9]\d|20\d{2})|\d{2})'
experience = re.findall(regex, 'August 2017 - Sep 2018')
print(experience)
这将返回[('', '', '20', '17', ''), ('', '', '20', '18', '')]
我也试过re.search:
import re
regex = r'(\b\d{1,2}\D{0,3}\b-)?\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(Nov|Dec)(?:ember)?)\D?(\d{1,2}\D?)?\D?((19[7-9]\d|20\d{2})|\d{2})'
experience = re.search(regex, 'August 2017 - Sep 2018')
print(experience.group())
这只会返回August 2017
我们可以用一些正则表达式来提取两个日期吗?
【问题讨论】:
-
这个
(?P<fmonth>\w+.\d+)\s+\-\s+(?P<smonth>\w+.\d+)怎么样? -
与其试图将所有内容都塞进正则表达式,不如使用更简单的正则表达式然后使用
datetime.strptime或dateutil.parser.parse_date解析数据会更容易、更易读。