我从包含日期的HTML元素中抓取字符串。我要做的是使用正则表达式提取日期,然后使用datetime模块将它们转换为不同的格式。字符串遵循以下格式:
Date first available at Amazon.ca: Nov. 23 2017
Date first available at Amazon.ca: March 27 2017
Date first available at Amazon.ca: March 6 2018棘手的是,只有名称较长的月份才会被缩写。
Jan.
Feb.
March
April
May
June
July
Aug.
Sept.
Oct.
Nov.
Dec.我的第一个想法是选择除Date first available at Amazon.ca:之外的所有内容,但显然这比我最初想象的要困难一些。
我的下一个想法是类似于r'^(J|F|M|A|S|O|De)',但这显然行不通,因为月份不在字符串的开头。
现在我被困在点子上了。
显然,像下面这样的正则表达式可以工作,但它似乎过于冗长。
r'(Jan.|Feb.|March|April|May|June|July|Aug.|Sept.|Oct.|Nov.|Dec.)[\d\s]+'
发布于 2018-09-24 01:09:39
所以这是我的完整解决方案。
first_available = ff.find_elements(By.XPATH, '//li[contains(., "Date first available")]')
regex_first_available = re.compile(r'(Jan|Feb|March|April|May|June|July|Aug|Sept|Oct|Nov|Dec)[\d\s]+')
if len(first_available) > 0:
first_available = regex_first_available.search(first_available[0].text).group(0)
else:
first_available = ff.find_element(By.XPATH, '//td[text()="Date First Available"]/following-sibling::td[1]').text.replace('.', '')
try:
first_available = datetime.datetime.strptime(first_available, '%b %d %Y').strftime('%Y-%m-%d')
except ValueError:
first_available = datetime.datetime.strptime(first_available, '%B %d %Y').strftime('%Y-%m-%d')如果有人改进了这种方法,我会选择您的解决方案作为答案。
https://stackoverflow.com/questions/52462801
复制相似问题