-1

日付を取得しようとしている Web ページがあります。私はフォーマットが何であるかを知っているので、解決策は と同じくらい簡単なはずですtime.strptime(format)が、問題はこれです:
If string cannot be parsed according to format, or if it has excess data after parsing, ValueError is raised.
私は次のようなものを解析しようとしています:

<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>  

対応する形式は次のようになります%B %d, %Y(実際には日付は関係ありません。日付が必要なだけです)。
正規表現 (例: ([JFMASOND][a-z]{2,8}) ([0-9]{1,2}), ([0-9]{4})) を使用して文字列の関連部分を取得することもできますが、正規表現から値自体を取得し、必要な変換を自分で行うこともできます。いわば、コンテナ文字列で strptime を使用する方法はありますか? strptime がフォーマットが一致するまで文字列を処理し続けるのはそれほど難しくないはずです...
(自分でやらなければならない場合、正規表現よりも良い方法はありますか?)

4

1 に答える 1

3

私は常にparsedatetimeモジュールを使用して、テキストから日付を抽出してきました。それはかなりうまくいきます:

>>> 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.、省略形を含むほぼすべての日付形式を受け入れますが、修正を拒否しているため、 に置き換えるだけで問題SeptなくSep動作します。

于 2012-08-05T21:56:02.040 に答える