作成日: 2023-4-4 更新日: 2023-4-25
カテゴリ- : ITブログ
正規表現について(日付)

正規表現について(日付)

領収書レシートデータを OCR 読み取りするときに日付の表記がぶれることがあります。

それを修正する正規表現です。

def format_date(date_str):
    patterns = [
        (r'(\d{4})[-/年](\d{1,2})[-/月](\d{1,2})[日]?.*?(?:\(.+?\))?', '%Y年%m月%d日'),
        (r'(\d{2})[-/年](\d{1,2})[-/月](\d{1,2})[日]?.*?(?:\(.+?\))?', '%y年%m月%d日')
    ]

    for pattern, date_format in patterns:
        match = re.match(pattern, date_str)
        if match:
            try:
                formatted_date = datetime.strptime(match.group(0), date_format).strftime('%Y/%m/%d')
                return formatted_date
            except ValueError:
                continue

    return date_str
 
 

特にここの部分について内容を見ていきましょう。

(r'(\d{4})[-/年](\d{1,2})[-/月](\d{1,2})[日]?.*?(?:\(.+?\))?', '%Y年%m月%d日'),
(r'(\d{2})[-/年](\d{1,2})[-/月](\d{1,2})[日]?.*?(?:\(.+?\))?', '%y年%m月%d日')

1. (r'(\d{4})[-/年](\d{1,2})[-/月](\d{1,2})[日]?.*?(?:\(.+?\))?', '%Y年%m月%d日')

  • (\d{4}): 4桁の数字が連続する部分を表します(例:2023)。これは西暦の年を表しています。
  • [-/年]: 年の区切り文字としてハイフン(-)、スラッシュ(/)、または「年」のいずれかが来ます。
  • (\d{1,2}): 1または2桁の数字が連続する部分を表します(例:01、1)。これは月を表しています。
  • [-/月]: 月の区切り文字としてハイフン(-)、スラッシュ(/)、または「月」のいずれかが来ます。
  • (\d{1,2}): 1または2桁の数字が連続する部分を表します(例:23、3)。これは日を表しています。
  • [日]?: 「日」が0回または1回出現します。
  • .*?(?:\(.+?\))?: 任意の文字が0回以上続く部分に対応し、その後に丸括弧で囲まれた任意の文字が0回以上続く部分が0回または1回出現します。この部分は曜日や時刻などの追加情報を無視するために使用されます。
  • %Y年%m月%d日: 日付の出力フォーマットを指定します。%Yは4桁の年、%mは2桁の月、%dは2桁の日を表します。

2. (r'(\d{2})[-/年](\d{1,2})[-/月](\d{1,2})[日]?.*?(?:\(.+?\))?', '%y年%m月%d日')

  • (\d{2}): 2桁の数字が連続する部分を表します(例:23)。これは西暦の下2桁の年を表しています。
  • 他の部分は1つ目の正規表現と同様です。
  • %y年%m月%d日: 日付の出力フォーマットを指定します。%yは西暦の下2桁の年、%mは2桁の月、%dは2桁の日を表します。
 

これらの正規表現は、年の部分だけが異なります。

1つ目の正規表現は4桁の年(西暦)を表現し、2つ目の正規表現は2桁の年(西暦の下2桁)を表現しています。両方の正規表現は、月、日、区切り文字、および括弧内の任意の文字(曜日や時刻など)については同じパターンを使用しています。

これらの正規表現は、異なる日付フォーマットを解析し、適切な出力フォーマットに変換する際に使用されます。1つ目の正規表現は %Y年%m月%d日 の出力フォーマットを持ち、2つ目の正規表現は %y年%m月%d日 の出力フォーマットを持ちます。

要するに、これらの正規表現は、年の桁数が異なる2つの日付フォーマットを処理するために使用されています。それ以外の部分については、両方の正規表現が同じパターンを使用しています。

お気軽にお問い合わせください

必須項目を全て入力してください (入力後、送信ボタンが表示されます) 24時間以内にご連絡を差し上げます。

※税理士に対する営業は業務の妨げになり迷惑です。やめてください。