0

次の文字列があります。

text = '3 Day Pass Tickets (September 27 - September 29 - 21+ Event)'

私の最終目標は、正規表現を使用して最新の日付 (9 月 29 日) を引き出すことです。これは一例ですが、常に最新の日付が最後になります。次の式を使用して

eventdate = re.search(r'(January|February|March|April|May|June|July|August|September|October|November|December) \d\d?', text)

結果は

eventdate.group() = 'September 27'

「9月29日」のみをキャプチャするように正規表現を変更するにはどうすればよいですか?

ありがとう!

4

3 に答える 3

4

代わりに使用re.findallして、最後に一致した文字列を取得します。

>>> pattern = r'((?:January|February|March|April|May|June|July|August|September|October|November|December) \d\d?)'
>>> re.findall(pattern, text)[-1]
'September 29'
于 2013-09-18T16:25:15.533 に答える
1

re.search次のように使用できます。

>>> result = re.search(r'.*((?:January|February|March|April|May|June|July|August|September|October|November|December) \d\d?)', text)
>>> print(result.group(1))
September 29

正規表現101のデモ

.*貪欲な性質が最後まですべてを「食べ」、バックトラックして最後の一致を取得するように、正規表現の先頭にを追加しました。

そして、必要な部分をキャプチャ グループに入れます (非キャプチャ グループで月を回しながら)。

また、月には次のようなものを使用できます。

(?:(?:Jan|Febr)uary|Ma(?:rch|y)|April|Ju(?:ne|ly)|August|(?:Septem|Octo|Novem|Decem)ber)
于 2013-09-18T16:30:50.803 に答える