【问题标题】:Python regular expression for extracting month and year用于提取月份和年份的 Python 正则表达式
【发布时间】: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.strptimedateutil.parser.parse_date 解析数据会更容易、更易读。

标签: python regex parsing


【解决方案1】:

你的意思是这样吗? Regex demo.

import re

string = "From August 2017 - September 2018"
month = re.search("(?P<fmonth>\w+.\d+)\s+\-\s+(?P<smonth>\w+.\d+)", string)
month = month.groups()

print (month)

输出:

('August 2017', 'September 2018')

【讨论】:

  • @Yusufn 感谢它的魅力。如果两个日期之间有 to 而不是 - ,我们也可以打印出相同的输出吗?例如:"From August 2017 to September 2018"
  • 然后把正则表达式改成(?P&lt;fmonth&gt;\w+.\d+)\s+\D+\s+(?P&lt;smonth&gt;\D+.\d+)
  • 那行得通。谢谢。上面的正则表达式也捕获了May,2017,所以我将其调整为:(?P&lt;fmonth&gt;\w+\s\d+)\s+\D+\s+(?P&lt;smonth&gt;\D+\s\d+)。将其发布为任何有相同问题的人都可以找到解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
相关资源
最近更新 更多