Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの正規表現で日付文字列をマッチングする方法をわかりやすく解説

Pythonでは、標準ライブラリの re モジュールを使用することで、正規表現による文字列のパターンマッチングを簡単に行えます。ここでは、re.match() を使って、日付文字列が「日-月-年(d-m-y)」形式に一致するかどうかを判定する方法を紹介します。

サンプルコード

import re

# パターンに一致する場合
datestring = '21-09-1991'
foo = re.match(r'(\d{2})[/.-](\d{2})[/.-](\d{4})$', datestring)
print(foo.group())

# パターンに一致しない場合
datestring = '1991-09-21'
foo = re.match(r'(\d{2})[/.-](\d{2})[/.-](\d{4})$', datestring)
print(foo)

実行結果

21-09-1991
None

コードの解説

この正規表現パターン (\d{2})[/.-](\d{2})[/.-](\d{4})$ の各要素の意味は以下の通りです。

  • \d{2}:2桁の数字(「日」の部分)
  • [/.-]:区切り文字として「/」「.」「-」のいずれか1文字
  • \d{2}:2桁の数字(「月」の部分)
  • [/.-]:再び区切り文字
  • \d{4}:4桁の数字(「年」の部分)
  • $:文字列の末尾を示すアンカー

最初の例「21-09-1991」は、「2桁-2桁-4桁」という形式に完全に一致しているため、マッチした文字列全体が group() メソッドによって返されます。

一方、2番目の例「1991-09-21」は先頭が4桁の数字で始まっているため、「2桁の数字から始まる」というパターンの条件を満たしません。その結果、re.match() はマッチオブジェクトの代わりに None を返します。

注意ポイント

re.match() は文字列の先頭からパターンとの一致を判定するという特徴があります。文字列の途中に一致箇所があっても、先頭から一致しなければマッチとはみなされません。文字列内の任意の位置で一致を検索したい場合は、re.search() を使用するとよいでしょう。

  1. Pythonで正規表現を使って文字列の先頭にマッチさせる方法

    正規表現では、^(キャレット)というメタ文字を使うことで、文字列の先頭にマッチさせることができます。この記号は、パターンが対象となる文字列の冒頭から始まる場合にのみ一致することを意味します。例えば、次のコードは文字列「cheer leaders at the football stadium」の先頭にある単語「cheer」を抽出して表示します。コード例import re s = cheer leaders at the football stadium result = re.search(r^\w+, s) print(result.group())ここで使用しているパターン r^\w+

  2. Pythonで正規表現を使って空白以外の文字にマッチさせる方法

    Pythonで正規表現を使って文字列中の「空白以外の文字」を照合するには、\S(大文字のS)という特殊シーケンスを使用します。\S はスペース・タブ・改行などの空白文字以外の任意の1文字にマッチし、+ を組み合わせることで、連続した空白以外の文字列(単語など)をまとめて取得できます。re.search() を使った例次のコードは、指定した文字列から最初に見つかった空白以外の文字の連なりを検索します。import re foo = re.search(r\S+, Need for Speed 2) print(foo)出力<re.Match object; span=(0, 4), mat