-8

Pythonの日付形式の正規表現が必要です

「3月29日」が欲しい

ただし、「3月29日、YYYY」の「3月29日」ではありません。YYYYは2012年ではありません。

ありがとう、

チェン

4

5 に答える 5

2

正規表現を使用する必要はありません。

import datetime

dt = datetime.datetime.now()
print dt.strftime('%B %d')

結果は次のようになります。

June 18

ところで、日付のリストを並べ替えて、2012年のものだけを表示したい場合は、次を使用してみてくださいsplit()

line = "March 29, YYYY"
if int(line.split(',')[1]) = 2012
    print line
else
    pass
于 2012-06-18T01:49:47.613 に答える
1

このように聞こえます:

re.compile(r'''^
   (january|february|march|...etc.)
   \s
   \d{1,2}
   \s
   (,\s2012)?
   $''', re.I)
于 2012-06-18T01:17:23.263 に答える
1

あなたの質問は100%明確ではありませんが、着信文字列から日付を解析しようとしているようです。その場合は、正規表現ではなくdatetimeモジュールを使用してください。ロケールなどを処理する可能性が高くなります。このdatetime.datetime.strptime()メソッドは文字列から日付を読み取るように設計されているため、次のようにしてみてください。

import datetime

def myDate(raw):
    # Try to match a date with a year.
    try:
        dt = datetime.datetime.strptime(raw, '%B %d, %Y')

        # Make sure its the year we want.
        if dt.year != 2012:
            return None

    # Error, try to match without a year.
    except ValueError:
        try:
            dt = datetime.datetime.strptime(raw, '%B %d')
        except ValueError:
            return None

        # Add in the year information - by default it says 1900 since
        # there was no year details in the string.
        dt = dt.replace(year=2012)

    # Strip away the time information and return just the date information.
    return dt.date()

このstrptime()メソッドは、datetimeオブジェクト、つまり日付時刻の情報を返します。したがって、最後の行はdate()メソッドを呼び出して日付だけを返します。Noneまた、有効な入力がない場合は関数が戻ることに注意してください。これは、状況に応じて簡単に変更できます。さまざまなフォーマットコードの詳細については、メソッドのドキュメントをstrptime()参照してください。

その使用例:

>>> myDate('March 29, 2012')
datetime.date(2012, 3, 29)
>>> myDate('March 29, 2011')
>>> myDate('March 29, 2011') is None
True
>>> myDate('March 29')
datetime.date(2012, 3, 29)
>>> myDate('March 39')
>>> myDate('March 39') is None
True

これは、正規表現で処理するのが難しい可能性がある違法な日付(たとえば、3月39日)をキャッチして受け入れることを拒否することに気付くでしょう。

于 2012-06-18T05:14:43.773 に答える
0

月と日を取得するための生の正規表現は次のとおり(january|february|...) \d\d?(?!\s*,\s*\d{4})です。

(?!\s*,\s*\d{4})先を見越して、文字列の後に。が続かないことを確認します, YYYY。私はあなたの質問のこの部分を理解したと思います。march 29, 20123月29日の後にコンマスペース年が続くため、一致しません。

于 2012-06-18T01:23:08.110 に答える
0

私はそれを自分で理解しました

(?!\ s *、\ s *(1 \ d \ d \ d | 200 \ d | 2010 | 2011))

于 2012-06-18T03:07:12.227 に答える