4

次を含むことができる文字列があります。

lots of text Nov 30  2011 lots more of text

また

lots of text Nov 30 12:48 lots more of text

一致させたいのは、その行内の日付です。私が取得したいのは、最初の行の次のとおりです。

{'date': 'Nov 30  2011', 'time': None}

または2行目:

{'date': None, 'time': 'Nov 30 12:48'}

だから私の試みはこれでした:

re.match(
    '^.+((?P<date>\w{3} \d{1,2}  \d{4})|(?P<time>\w{3} \d{1,2}:\d{2})).+', 
    line
)

しかし、これは機能しませんNone。他の組み合わせをいくつか試しましたが、どれもうまくいきませんでした。

これどうやってするの?

4

1 に答える 1

2

<time>グループの日がありません(例: "Nov 12:48" ):

(?P<date>\w{3} \d{1,2}  \d{4})|(?P<time>\w{3} \d{1,2} \d{1,2}:\d{2})

また、おそらく日付なしでそのパターンに一致させることができます^.+(...).+- それはあなたの日付の前後に少なくとも文字を必要とする以上の追加はありません. \s+また、スペースをor +(スペース プラス、または[ ]+表示したい場合)に置き換えることをお勧めします。いくつかの場所にダブル スペースがあり、あまり堅牢ではありません。

別のオプションは、繰り返しを避けることです。日付を独自のグループに保持し、時間と年の間に代替を追加します。

(?P<date>\w{3}\s+\d{1,2})\s+(?:(?P<year>\d{4})|(?P<time>\d{1,2}:\d{2}))

作業例: http://rubular.com/r/g81Kudu0dY (名前なし)

于 2012-08-15T06:17:26.920 に答える