查找两个标签之间的有效日期

时间:2019-01-25 19:56:42

标签: python html regex date

给出一个非结构化的HTML文本,其中包含一些格式为'%b%d'的日期值,并带有一些约束(请参见下文),您认为哪种方法最合适:

  • 使用regix吗?
  • 手动解析?
  • 带一些python日期库吗?

这是HTML文本的摘录:

text = '...some text ...>Jan 29 AMC<...some text ...'

我想提取零件:

  • 以>
  • 开头
  • 然后3个字母(即月份)
  • 然后空白
  • 然后输入2位数字
  • 然后输入AMC或BMO
  • 然后是<< / li>

2 个答案:

答案 0 :(得分:2)

使用此正则表达式:

<.*?>(\w{3}\s\d{2}\s(AMC|BMO))

*请注意,该模式可以使您获得非月模式!否则,您必须手动设置它们。

<.*?>((Jan|Feb|....)\s\d{2}\s(AMC|BMO))

Demo

Python代码:

import re 

reg = r'<.*?>(\w{3}\s\d{2}\s(AMC|BMO))'
text = '<...some text ...>Jan 29 AMC</...some text ...>'
Res = re.findall(reg,text)
if len(Res) != 0:
    for r in Res:
        print(r[0])

import re 

reg = r'<.*?>(\w{3}\s\d{2}\s(AMC|BMO))'
text = '<...some text ...>Jan 29 AMC</...some text ...>'
Res = re.match(reg,text)
if Res:
    print ('Valid')

答案 1 :(得分:1)

对于我标记为重复的问题,您也可以按照dateutil.parser()的说明使用this answewr

import dateutil.parser as DateParser
from datetime import datetime

text = '...sometext...>Jan 29 AMC<...sometext...'
parsed_date = DateParser.parse(text, fuzzy=True)
print(parsed_date)
#2019-01-29 00:00:00

注意 这与您提到的模式匹配无关,但确实为您提供了一个日期,如果找到多个日期,它也会返回多个日期。但这确实有些猜测。