Python 3:从容器字符串解析日期

Python 3:从容器字符串解析日期,python,parsing,datetime,python-3.x,Python,Parsing,Datetime,Python 3.x,我有一个网页,我想从中得到一个日期。我知道格式是什么,所以解决方案应该尽可能简单,但问题是: 如果字符串无法按照格式进行解析,或者解析后数据过多,则会引发ValueError。 我正在尝试分析如下内容: <tr><td align="center"><b>Create time</b></td> </tr><tr><td align="center" bgcolor="#DDDDDD">Between

我有一个网页,我想从中得到一个日期。我知道格式是什么,所以解决方案应该尽可能简单,但问题是:
如果字符串无法按照格式进行解析,或者解析后数据过多,则会引发ValueError。

我正在尝试分析如下内容:

<tr><td align="center"><b>Create time</b></td>
</tr><tr><td align="center" bgcolor="#DDDDDD">Between August 1, 2012, 8:05 pm and August 1, 2012, 8:06 pm</td>  
创建时间
2012年8月1日晚上8:05至2012年8月1日晚上8:06之间
相应的格式是
%B%d,%Y
(哪一个日期并不重要,我只需要一个日期)。
我可以使用正则表达式(例如,
([JFMASOND][a-z]{2,8})([0-9]{1,2}),([0-9]{4})
)来获取字符串的相关部分,但我也可以从正则表达式中获取值本身并自己进行必要的转换。可以说,有没有办法在容器字符串上使用strtime?strptime只要不断地处理字符串,直到得到格式匹配,应该不会太难…
(如果我必须自己做的话,还有比正则表达式更好的方法吗?

我一直使用该模块从文本中提取日期。它工作得很好:

>>> import parsedatetime as pdt
>>> parser = pdt.Calendar(pdt.Constants())
>>> parser.parseDateText('Between August 1, 2012, 8:05 pm and August 1, 2012, 8:06 pm')
daysInMonth(8, 2012)
(2012, 8, 1, 17, 53, 18, 6, 218, 1)
>>> 

它接受几乎所有带有缩写的日期格式,除了
Sept.
,我已将其发布到bug跟踪器,但他们拒绝修复它,所以我只是将
Sep
替换为
Sep
,效果很好。

首先,您使用XML解析器解析HTML,是吗?@lkjoel:我不会用XML解析器来解析HTML。使用BeautifulSoup。什么解析?我只需要页面中的日期。@Dubslow:为了使日期解析更容易,您需要从HTML中提取文本,这是HTML解析器所做的。是的,但解析器只能告诉我页面中的内容,我需要清除剩下的大部分内容。嗯。。。我想它也可以处理字符串中的所有其他HTML垃圾?我对使用非标准库的东西有点犹豫,特别是因为它不比几行正则表达式短…HTML的东西本来就不应该在那里,所以你需要以某种方式清理它。至于解析器,使用非标准库模块有什么错?它比任何自制的正则表达式解决方案都更有效,无论格式如何,它都能为您解析日期;配置一个HTMLParser比仅仅将11行HTML传递到pdt解析器要麻烦得多……如果您知道确切的输入,那就好了。如果没有,使用,您可以在一行中解析HTML:
cleaned=BeautifulSoup(HTML).find('td',{'bgcolor','#DDDDDD'}).text
。(查看来源)它不会工作。任何HTML解析器都需要以任何方式查看字符串,这就是整个问题的核心所在。我知道解析器就在那里,我决定它们不会有用。