2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

tuat-sysbiolabAdvent Calendar 2024

Day 25

C#で日付を記念日の名前に変換する奴を作成してみた!

Posted at

今回はC#の正規表現を用いて、文章中に存在する日付を記念日に変換する奴を作成しました。

アプリの概要

このアプリは、ユーザーが入力したテキスト内に含まれる日付(例:01-01や1月1日)を特定の記念日に変換するものです。

例えば、以下のようなテキストを入力すると:

今日は01-01だね。

変換後は:

今日は元日だね。

といった具合に、日付を対応する記念日の名前に置き換えます。

実装のポイント

1. データ構造

記念日を管理するために、Dictionary>を使用しました。この辞書は、日付(MM-dd形式)をキーにして、対応する複数の記念日を格納しています。

Dictionary<string, List<string>> converter = new Dictionary<string, List<string>>()
{
    {"01-01", new List<string>(){ "元日", "鉄腕アトムの日" }},
    {"01-02", new List<string>(){ "初夢の日" }},
    {"01-03", new List<string>(){ "瞳の日", "駆け落ちの日" }},
    // ... (その他の日付も定義)
};

2. 正規表現で日付を抽出

ユーザーが入力したテキストから日付を抽出するために、正規表現を使用しました。以下のパターンでMM-ddや1月1日形式を同時に処理します。

string pattern = @"(1[0-2]|0?[1-9])[-月/]([1-2][0-9]|3[0-1]|0?[1-9])[日]?";

3. 日付の有効性を確認

抽出した日付が有効かどうかを確認するために、DateTime.TryParseを使用しています。

bool isValidDate = DateTime.TryParse($"{month}/{day}/2000", out DateTime parsedDate);

4. 置換処理

最後に有効な日付の場合はランダムな記念日に置換し、無効な日付は元の値を維持します。

private string Replace(string text)
{
    string replacedText = Regex.Replace(text, pattern, match =>
    {
        int month = int.Parse(match.Groups[1].Value);
        int day = int.Parse(match.Groups[2].Value);

        // 日付が有効か確認
        bool isValidDate = DateTime.TryParse($"{month}/{day}/2000", out DateTime parsedDate);

        // 有効な日付ならフォーマットを変更、そうでなければそのまま
        return isValidDate ? GetRandomItem(converter[parsedDate.ToString("MM-dd")]) : match.Value;
    });

    return replacedText;
}

// リストからランダムな要素を取得するメソッド
static T GetRandomItem<T>(List<T> list)
{
    if (list == null || list.Count == 0)
    {
        throw new ArgumentException("The list cannot be null or empty.");
    }

    Random random = new Random();
    int randomIndex = random.Next(list.Count); // ランダムなインデックスを生成
    return list[randomIndex]; // ランダムな要素を返す
}

コード全体

長いので折りたたみました。
using System.Text.RegularExpressions;

namespace DateToNameConverter
{
    public partial class MainForm : Form
    {
        Dictionary<string, List<string>> converter = new Dictionary<string, List<string>>()
        {
            {"01-01", new List<string>(){ "元日", "鉄腕アトムの日" }},
            {"01-02", new List<string>(){ "初夢の日" }},
            {"01-03", new List<string>(){ "瞳の日", "駆け落ちの日" }},
            {"01-04", new List<string>(){ "石の日" }},
            {"01-05", new List<string>(){ "囲碁の日", "いちごの日" }},
            {"01-06", new List<string>(){ "色の日", "ショートケーキの日" }},
            {"01-07", new List<string>(){ "爪切りの日", "千円札の日" }},
            {"01-08", new List<string>(){ "外国郵便の日", "勝負事の日" }},
            {"01-09", new List<string>(){ "風邪の日", "とんちの日" }},
            {"01-10", new List<string>(){ "110番の日", "明太子の日" }},
            {"01-11", new List<string>(){ "塩の日" }},
            {"01-12", new List<string>(){ "スキーの日", "桜島の日" }},
            {"01-13", new List<string>(){ "たばこの日" }},
            {"01-14", new List<string>(){ "タロとジロの日" }},
            {"01-15", new List<string>(){ "フードドライブの日" }},
            {"01-16", new List<string>(){ "禁酒の日" }},
            {"01-17", new List<string>(){ "防災とボランティアの日", "おむすびの日" }},
            {"01-18", new List<string>(){ "118番の日", "都バス記念日", "振袖火事の日" }},
            {"01-19", new List<string>(){ "のど自慢の日", "カラオケの日" }},
            {"01-20", new List<string>(){ "玉の輿の日" }},
            {"01-21", new List<string>(){ "料理番組の日" }},
            {"01-22", new List<string>(){ "ジャズの日", "カレーの日", "飛行船の日" }},
            {"01-23", new List<string>(){ "電子メールの日", "八甲田山の日", "アーモンドの日" }},
            {"01-24", new List<string>(){ "郵便制度施行記念日", "法律扶助の日", "すき焼きの日", "ボーイスカウト創立記念日" }},
            {"01-25", new List<string>(){ "日本最低気温の日", "ホットケーキの日", "中華まんの日", "左遷の日", "お詫びの日" }},
            {"01-26", new List<string>(){ "文化財防火デー", "パーキングメーターの日" }},
            {"01-27", new List<string>(){ "国旗制定記念日", "求婚の日" }},
            {"01-28", new List<string>(){ "コピーライターの日", "衣類乾燥機の日" }},
            {"01-29", new List<string>(){ "昭和基地開設記念日", "タウン情報の日" }},
            {"01-30", new List<string>(){ "3分間電話の日" }},
            {"01-31", new List<string>(){ "生命保険の日", "愛妻家の日", "ファイナルファンタジーVIIの日" }},
            {"02-01", new List<string>(){ "テレビ放送記念日", "ニオイの日", "プリキュアの日" }},
            {"02-02", new List<string>(){ "頭痛の日", "ツインテールの日", "くちびるの日" }},
            {"02-03", new List<string>(){ "大岡越前の日", "絵手紙の日" }},
            {"02-04", new List<string>(){ "西の日", "銀閣寺の日", "Nissyの日" }},
            {"02-05", new List<string>(){ "プロ野球の日", "ピカチュウの日" }},
            {"02-06", new List<string>(){ "海苔の日", "抹茶の日", "ブログの日" }},
            {"02-07", new List<string>(){ "北方領土の日" }},
            {"02-08", new List<string>(){ "ロカビリーの日", "にわとりの日" }},
            {"02-09", new List<string>(){ "服の日", "福の日", "肉の日" }},
            {"02-10", new List<string>(){ "フルートの日", "ニットの日", "ふきのとうの日", "観劇の日", "太物の日" }},
            {"02-11", new List<string>(){ "建国記念の日", "信教の自由を守る日", "万歳三唱の日", "わんこそば記念日" }},
            {"02-12", new List<string>(){ "ブラジャーの日", "ボブスレーの日", "ボンカレーの日/レトルトカレーの日" }},
            {"02-13", new List<string>(){ "銀行強盗の日", "気くばりの日", "日本遺産の日" }},
            {"02-14", new List<string>(){ "バレンタインデー", "チョコレートの日", "煮干の日", "ふんどしの日" }},
            {"02-15", new List<string>(){ "春一番名づけの日" }},
            {"02-16", new List<string>(){ "天気図記念日", "寒天の日" }},
            {"02-17", new List<string>(){ "天使のささやきの日" }},
            {"02-18", new List<string>(){ "エアメールの日", "嫌煙運動の日" }},
            {"02-19", new List<string>(){ "万国郵便連合加盟記念日", "プロレスの日" }},
            {"02-20", new List<string>(){ "旅券の日", "歌舞伎の日", "普通選挙の日", "アレルギーの日", "交通事故ゼロを目指す日" }},
            {"02-21", new List<string>(){ "日刊新聞創刊の日", "食糧管理法公布記念日", "漱石の日" }},
            {"02-22", new List<string>(){ "猫の日", "食器洗い乾燥機の日", "忍者の日", "乃木坂46の日", "竹島の日", "行政書士記念日" }},
            {"02-23", new List<string>(){ "税理士記念日", "富士山の日", "ふろしきの日" }},
            {"02-24", new List<string>(){ "鉄道ストの日", "月光仮面登場の日" }},
            {"02-25", new List<string>(){ "夕刊紙の日", "箱根用水完成の日" }},
            {"02-26", new List<string>(){ "咸臨丸の日", "血液銀行開業記念日" }},
            {"02-27", new List<string>(){ "新選組の日", "絆の日(冬の恋人の日)", "ポケモンの日" }},
            {"02-28", new List<string>(){ "エッセイ記念日", "ビスケットの日", "バカヤローの日", "織部の日" }},
            {"02-29", new List<string>(){ "ニンニクの日", "富士急の日", "閏肉の日", "キン肉マンの日" }},
            {"03-01", new List<string>(){ "ビキニデー", "労働法施行記念日" }},
            {"03-02", new List<string>(){ "ミニチュアの日" }},
            {"03-03", new List<string>(){ "耳の日", "民放ラジオの日", "平和の日", "桃の日", "金魚の日", "結納の日", "サルサの日", "サザンの日" }},
            {"03-04", new List<string>(){ "雑誌の日", "ミシンの日", "サッシの日", "三線の日" }},
            {"03-05", new List<string>(){ "珊瑚の日", "ミスコンの日", "スチュワーデスの日" }},
            {"03-06", new List<string>(){ "エステティックサロンの日", "弟の日", "スポーツ新聞の日", "世界一周記念日", "36(サブロク)の日" }},
            {"03-07", new List<string>(){ "消防記念日", "警察制度改正記念日" }},
            {"03-08", new List<string>(){ "ミツバチの日", "エスカレーターの日", "みやげの日", "光の日", "サバの日" }},
            {"03-09", new List<string>(){ "漁業法記念日", "ありがとうの日", "記念切手記念日", "ミクの日" }},
            {"03-10", new List<string>(){ "陸軍記念日", "砂糖の日", "佐渡の日", "水戸の日", "ミントの日", "サボテンの日", "農山漁村女性の日" }},
            {"03-11", new List<string>(){ "コラムの日" }},
            {"03-12", new List<string>(){ "サイフの日", "モスの日" }},
            {"03-13", new List<string>(){ "青函トンネル開業記念日", "気くばりの日" }},
            {"03-14", new List<string>(){ "ホワイトデー", "キャンデーの日", "マシュマロデー", "国際結婚の日", "πの日" }},
            {"03-15", new List<string>(){ "靴の記念日", "オリーブの日" }},
            {"03-16", new List<string>(){ "国立公園指定記念日" }},
            {"03-17", new List<string>(){ "漫画週刊誌の日" }},
            {"03-18", new List<string>(){ "精霊の日" }},
            {"03-19", new List<string>(){ "ミュージックの日" }},
            {"03-20", new List<string>(){ "動物愛護デー", "上野動物園開園記念日", "LPレコードの日", "電卓の日", "未病の日" }},
            {"03-21", new List<string>(){ "ランドセルの日", "はじめようの日" }},
            {"03-22", new List<string>(){ "放送記念日" }},
            {"03-23", new List<string>(){ "スジャータの日" }},
            {"03-24", new List<string>(){ "マネキン記念日" }},
            {"03-25", new List<string>(){ "電気記念日" }},
            {"03-26", new List<string>(){ "カチューシャの歌の日" }},
            {"03-27", new List<string>(){ "さくらの日" }},
            {"03-28", new List<string>(){ "三つ葉の日", "刀剣乱舞・審神者の日" }},
            {"03-29", new List<string>(){ "マリモの日", "ラヴィット!の日" }},
            {"03-30", new List<string>(){ "サラサーティの日", "信長の野望の日" }},
            {"03-31", new List<string>(){ "学校教育法公布記念日", "オーケストラの日", "経理の日" }},
            {"04-01", new List<string>(){ "エイプリルフール", "児童福祉法施行記念日", "売春防止法施行記念日", "トレーニングの日", "ストラップの日", "建設業DX推進の日" }},
            {"04-02", new List<string>(){ "週刊誌の日", "歯列矯正の日" }},
            {"04-03", new List<string>(){ "シーサーの日", "いんげん豆の日", "植栽日" }},
            {"04-04", new List<string>(){ "あんぱんの日", "獅子の日", "トランスジェンダーの日", "脂肪0%ヨーグルトの日" }},
            {"04-05", new List<string>(){ "デビューの日", "ヘアカットの日", "横町の日" }},
            {"04-06", new List<string>(){ "白の日", "城の日" }},
            {"04-07", new List<string>(){ "スーチーパイの日", "未病管理の日" }},
            {"04-08", new List<string>(){ "参考書の日", "忠犬ハチ公の日", "タイヤの日", "折り紙供養の日", "貝の日", "Get Wildの日" }},
            {"04-09", new List<string>(){ "フォークソングの日", "大仏の日", "左官の日" }},
            {"04-10", new List<string>(){ "ヨットの日", "四万十の日", "建具の日", "良い戸の日", "交通事故ゼロを目指す日" }},
            {"04-11", new List<string>(){ "メートル法公布記念日", "ガッツポーズの日" }},
            {"04-12", new List<string>(){ "タイルの日" }},
            {"04-13", new List<string>(){ "決闘の日", "喫茶店の日" }},
            {"04-14", new List<string>(){ "オレンジデー", "柔道整復の日" }},
            {"04-15", new List<string>(){ "ヘリコプターの日", "遺言の日" }},
            {"04-16", new List<string>(){ "女子マラソンの日" }},
            {"04-17", new List<string>(){ "ハローワークの日", "恐竜の日" }},
            {"04-18", new List<string>(){ "発明の日", "お香の日" }},
            {"04-19", new List<string>(){ "地図の日" }},
            {"04-20", new List<string>(){ "逓信記念日", "郵政記念日", "女子大の日", "青年海外協力隊の日" }},
            {"04-21", new List<string>(){ "民放の日" }},
            {"04-22", new List<string>(){ "清掃デー", "道の駅の日" }},
            {"04-23", new List<string>(){ "サン・ジョルディの日", "子ども読書の日", "地ビールの日" }},
            {"04-24", new List<string>(){ "日本ダービー記念日", "植物学の日" }},
            {"04-25", new List<string>(){ "歩道橋の日", "拾得物の日" }},
            {"04-26", new List<string>(){ "よい風呂の日" }},
            {"04-27", new List<string>(){ "悪妻の日", "婦人警官記念日" }},
            {"04-28", new List<string>(){ "サンフランシスコ講和記念日", "象の日", "シニアの日" }},
            {"04-29", new List<string>(){ "羊肉の日", "畳の日" }},
            {"04-30", new List<string>(){ "図書館記念日" }},
            {"05-01", new List<string>(){ "メーデー", "日本赤十字社創立記念日", "青春の日", "扇の日", "スズランの日", "サラウンドの日", "語彙の日" }},
            {"05-02", new List<string>(){ "郵便貯金の日", "交通広告の日", "エンピツ記念日", "歯科医師記念日" }},
            {"05-03", new List<string>(){ "憲法記念日", "ゴミの日" }},
            {"05-04", new List<string>(){ "みどりの日", "名刺の日", "競艇の日", "ラムネの日", "植物園の日", "エメラルドの日" }},
            {"05-05", new List<string>(){ "こどもの日", "おもちゃの日", "わかめの日", "自転車の日", "薬の日", "ジャグラーの日" }},
            {"05-06", new List<string>(){ "コロコロの日", "ゴムの日", "コロッケの日" }},
            {"05-07", new List<string>(){ "粉の日", "博士の日" }},
            {"05-08", new List<string>(){ "松の日", "ゴーヤーの日", "御用の日" }},
            {"05-09", new List<string>(){ "アイスクリームの日", "黒板の日", "メイクの日", "悟空の日", "謎解きの日" }},
            {"05-10", new List<string>(){ "コットンの日", "愛鳥の日", "メイドの日" }},
            {"05-11", new List<string>(){ "長良川鵜飼開きの日" }},
            {"05-12", new List<string>(){ "看護の日", "海上保安の日", "アセロラの日" }},
            {"05-13", new List<string>(){ "メイストームデー", "2文字スピーチの日" }},
            {"05-14", new List<string>(){ "けん玉の日", "マーマレードの日" }},
            {"05-15", new List<string>(){ "沖縄返還の日", "ヨーグルトの日", "ストッキングの日", "Jリーグの日" }},
            {"05-16", new List<string>(){ "旅の日" }},
            {"05-17", new List<string>(){ "パック旅行の日" }},
            {"05-18", new List<string>(){ "ことばの日" }},
            {"05-19", new List<string>(){ "ボクシング記念日", "チャンピオンの日" }},
            {"05-20", new List<string>(){ "ローマ字の日", "森林の日" }},
            {"05-21", new List<string>(){ "小学校開校の日" }},
            {"05-22", new List<string>(){ "ガールスカウトの日" }},
            {"05-23", new List<string>(){ "キスの日", "ラブレターの日", "難病の日" }},
            {"05-24", new List<string>(){ "ゴルフ場記念日", "伊達巻の日" }},
            {"05-25", new List<string>(){ "食堂車の日", "広辞苑記念日" }},
            {"05-26", new List<string>(){ "ラッキーゾーンの日" }},
            {"05-27", new List<string>(){ "ドラゴンクエストの日", "海軍記念日", "百人一首の日", "小松菜の日" }},
            {"05-28", new List<string>(){ "ゴルフ記念日" }},
            {"05-29", new List<string>(){ "呉服の日", "こんにゃくの日" }},
            {"05-30", new List<string>(){ "消費者の日", "ごみゼロの日", "掃除機の日" }},
            {"05-31", new List<string>(){ "古材の日" } },
                        {"06-01", new List<string>(){ "気象記念日", "電波の日", "景観の日", "写真の日", "麦茶の日", "チューインガムの日", "氷の日", "真珠の日", "バッジの日", "ねじの日", "人権擁護委員の日", "TUBEの日", "牛乳の日", "氷狐の日", "い草の日" }},
            {"06-02", new List<string>(){ "路地の日", "裏切りの日" }},
            {"06-03", new List<string>(){ "測量の日", "ムーミンの日", "ケロミンの日", "雲仙普賢岳祈りの日" }},
            {"06-04", new List<string>(){ "虫の日", "すとぷりの日" }},
            {"06-05", new List<string>(){ "環境の日" }},
            {"06-06", new List<string>(){ "補聴器の日", "邦楽の日", "楽器の日", "梅の日", "かえるの日", "兄の日", "ケロケロの日" }},
            {"06-07", new List<string>(){ "母親大会記念日", "むち打ち治療の日" }},
            {"06-08", new List<string>(){ "ロハスの日", "ガパオの日" }},
            {"06-09", new List<string>(){ "ロックの日" }},
            {"06-10", new List<string>(){ "時の記念日", "路面電車の日", "商工会の日", "歩行者天国の日", "ミルクキャラメルの日" }},
            {"06-11", new List<string>(){ "国立銀行設立の日", "雨漏り点検の日" }},
            {"06-12", new List<string>(){ "バザー記念日" }},
            {"06-13", new List<string>(){ "鉄人の日", "FMの日", "小さな親切の日", "はやぶさの日", "いいみょうがの日" }},
            {"06-14", new List<string>(){ "認知症予防の日", "手羽先記念日" }},
            {"06-15", new List<string>(){ "信用金庫の日", "暑中見舞いの日", "オウムとインコの日", "米百俵デー" }},
            {"06-16", new List<string>(){ "和菓子の日", "麦とろの日", "ケーブルテレビの日", "無重力の日", "スペースインベーダーの日" }},
            {"06-17", new List<string>(){ "おまわりさんの日", "薩摩の日" }},
            {"06-18", new List<string>(){ "海外移住の日" }},
            {"06-19", new List<string>(){ "元号の日", "朗読の日", "ロマンスの日" }},
            {"06-20", new List<string>(){ "ペパーミントデー" }},
            {"06-21", new List<string>(){ "スナックの日" }},
            {"06-22", new List<string>(){ "かにの日", "ボウリングの日" }},
            {"06-23", new List<string>(){ "沖縄慰霊の日" }},
            {"06-24", new List<string>(){ "UFO記念日" }},
            {"06-25", new List<string>(){ "住宅デー", "百合の日" }},
            {"06-26", new List<string>(){ "露天風呂の日", "オリエンテーリングの日", "国民憲章調印記念日", "世界格闘技の日" }},
            {"06-27", new List<string>(){ "演説の日", "日照権の日", "女性雑誌の日", "ちらし寿司の日", "メディア・リテラシーの日", "ハピカジの日" }},
            {"06-28", new List<string>(){ "貿易記念日", "パフェの日" }},
            {"06-29", new List<string>(){ "ビートルズ記念日", "佃煮の日" }},
            {"06-30", new List<string>(){ "集団疎開の日" }},
            {"07-01", new List<string>(){ "国民安全の日", "童謡の日", "建築士の日", "弁理士の日", "郵便番号記念日", "更生保護の日", "銀行の日", "ナビの日" }},
            {"07-02", new List<string>(){ "ユネスコ加盟記念の日", "たわしの日" }},
            {"07-03", new List<string>(){ "ソフトクリームの日", "波の日", "通天閣の日" }},
            {"07-04", new List<string>(){ "梨の日" }},
            {"07-05", new List<string>(){ "江戸切子の日", "穴子の日" }},
            {"07-06", new List<string>(){ "公認会計士の日", "ゼロ戦の日" }},
            {"07-07", new List<string>(){ "川の日", "カルピスの日", "冷やし中華の日", "ポニーテールの日", "ゆかたの日", "ハスカップの日" }},
            {"07-08", new List<string>(){ "那覇の日", "質屋の日", "ナンパの日" }},
            {"07-09", new List<string>(){ "ジェットコースターの日", "なな→きゅうの日" }},
            {"07-10", new List<string>(){ "納豆の日", "ウルトラマンの日", "ブナピーの日" }},
            {"07-11", new List<string>(){ "ラーメンの日" }},
            {"07-12", new List<string>(){ "人間ドックの日" }},
            {"07-13", new List<string>(){ "日本標準時制定記念日", "オカルト記念日", "ナイスの日", "2文字スピーチの日", "生命尊重の日" }},
            {"07-14", new List<string>(){ "検疫記念日", "求人広告の日" }},
            {"07-15", new List<string>(){ "ファミコンの日" }},
            {"07-16", new List<string>(){ "駅弁記念日", "国土交通Day" }},
            {"07-17", new List<string>(){ "東京の日" }},
            {"07-18", new List<string>(){ "光化学スモッグの日" }},
            {"07-19", new List<string>(){ "女性大臣の日", "カープ黄金時代幕開けの日" }},
            {"07-20", new List<string>(){ "勤労青少年の日", "ハンバーガーの日", "Tシャツの日", "修学旅行の日" }},
            {"07-21", new List<string>(){ "自然公園の日" }},
            {"07-22", new List<string>(){ "ナッツの日", "ONE PIECEの日" }},
            {"07-23", new List<string>(){ "ふみの日", "米騒動の日" }},
            {"07-24", new List<string>(){ "劇画の日", "卒業アルバムの日" }},
            {"07-25", new List<string>(){ "最高気温記念日", "うま味調味料の日", "かき氷の日" }},
            {"07-26", new List<string>(){ "幽霊の日" }},
            {"07-27", new List<string>(){ "スイカの日" }},
            {"07-28", new List<string>(){ "菜っ葉の日", "なにわの日", "冷蔵庫記念日", "地名の日" }},
            {"07-29", new List<string>(){ "アマチュア無線の日", "白だしの日" }},
            {"07-30", new List<string>(){ "梅干の日" }},
            {"07-31", new List<string>(){ "蓄音機の日", "こだまの日", "パラグライダー記念日" }},
                        {"08-01", new List<string>(){ "水の日", "観光の日", "肺の日", "夏の省エネ総点検の日", "パインの日", "麻雀の日" }},
            {"08-02", new List<string>(){ "パンツの日", "ハーブの日", "博多人形の日", "ハラスメントフリーの日", "ねぶたの日" }},
            {"08-03", new List<string>(){ "ビーチサンダルの日", "はちみつの日", "はさみの日", "共創する未来の日" }},
            {"08-04", new List<string>(){ "橋の日", "箸の日" }},
            {"08-05", new List<string>(){ "箱の日", "タクシーの日", "ハードコアテクノの日", "山ごはんの日", "パソコン工房の日" }},
            {"08-06", new List<string>(){ "広島原爆忌", "ハムの日", "ハムスターの日" }},
            {"08-07", new List<string>(){ "鼻の日", "花の日", "バナナの日" }},
            {"08-08", new List<string>(){ "フジテレビの日", "そろばんの日", "ヒゲの日", "ひょうたんの日", "屋根の日", "プチプチの日", "葉っぱの日", "サステナブルファッションの日" }},
            {"08-09", new List<string>(){ "長崎原爆忌", "野球の日", "薬草の日", "はり・きゅう・マッサージの日", "ハグの日", "パークの日", "パソコン救急の日", "パソコン検定の日", "パグの日", "反中共デー" }},
            {"08-10", new List<string>(){ "道の日", "宿の日", "帽子の日", "ハートの日", "レゲエミュージックの日" }},
            {"08-11", new List<string>(){ "山の日", "スポーツ中継の日", "オフ会記念日", "山の日", "ガンバレの日" }},
            {"08-12", new List<string>(){ "君が代記念日" }},
            {"08-13", new List<string>(){ "函館夜景の日", "深読みの日" }},
            {"08-14", new List<string>(){ "特許の日", "ハッピーサマーバレンタインデー" }},
            {"08-15", new List<string>(){ "終戦の日" }},
            {"08-16", new List<string>(){ "電子コミックの日" }},
            {"08-17", new List<string>(){ "パイナップルの日", "プロ野球ナイター記念日" }},
            {"08-18", new List<string>(){ "高校野球記念日" }},
            {"08-19", new List<string>(){ "バイクの日", "俳句の日", "ハイキューの日" }},
            {"08-20", new List<string>(){ "発毛の日", "蚊の日" }},
            {"08-21", new List<string>(){ "噴水の日", "献血記念日", "女子大生の日" }},
            {"08-22", new List<string>(){ "居心地の日" }},
            {"08-23", new List<string>(){ "白虎隊の日" }},
            {"08-24", new List<string>(){ "大噴火の日" }},
            {"08-25", new List<string>(){ "即席ラーメン記念日" }},
            {"08-26", new List<string>(){ "レインボーブリッジの日", "パワプロの日", "火山防災の日" }},
            {"08-27", new List<string>(){ "寅さんの日" }},
            {"08-28", new List<string>(){ "キャラディネートの日", "バイオリンの日", "民放テレビスタートの日" }},
            {"08-29", new List<string>(){ "焼き肉の日", "ケーブルカーの日" }},
            {"08-30", new List<string>(){ "冒険家の日" }},
            {"08-31", new List<string>(){ "野菜の日" }},
            {"09-01", new List<string>(){ "防災の日", "キウイの日", "だじゃれの日" }},
            {"09-02", new List<string>(){ "宝くじの日", "牛乳の日" }},
            {"09-03", new List<string>(){ "ベッドの日", "ホームラン記念日", "草野球の日", "妹の日" }},
            {"09-04", new List<string>(){ "くしの日", "クラシック音楽の日" }},
            {"09-05", new List<string>(){ "石炭の日", "国民栄誉賞の日" }},
            {"09-06", new List<string>(){ "黒の日", "黒豆の日", "妹の日" }},
            {"09-07", new List<string>(){ "クリーナーの日", "CMソングの日" }},
            {"09-08", new List<string>(){ "桑の日", "休養の日", "クーパー靱帯の日", "クレバの日" }},
            {"09-09", new List<string>(){ "救急の日", "温泉の日", "チョロQの日", "九九の日", "ポップコーンの日" }},
            {"09-10", new List<string>(){ "弓道の日", "全国下水道促進デー", "下水道の日", "屋外広告の日", "クレジットカードの日" }},
            {"09-11", new List<string>(){ "警察相談の日", "公衆電話の日" }},
            {"09-12", new List<string>(){ "宇宙の日" }},
            {"09-13", new List<string>(){ "司法保護記念日" }},
            {"09-14", new List<string>(){ "メンズバレンタインデー" }},
            {"09-15", new List<string>(){ "老人の日", "日本のキャビアの日", "ひじきの日" }},
            {"09-16", new List<string>(){ "競馬の日" }},
            {"09-17", new List<string>(){ "モノレール開業記念日" }},
            {"09-18", new List<string>(){ "かいわれ大根の日", "しまくとぅばの日" }},
            {"09-19", new List<string>(){ "苗字の日" }},
            {"09-20", new List<string>(){ "空の日", "バスの日", "お手玉の日" }},
            {"09-21", new List<string>(){ "ガトーショコラの日", "ファッションショーの日" }},
            {"09-22", new List<string>(){ "孤児院の日" }},
            {"09-23", new List<string>(){ "不動産の日", "万年筆の日" }},
            {"09-24", new List<string>(){ "清掃の日", "畳の日" }},
            {"09-25", new List<string>(){ "10円カレーの日" }},
            {"09-26", new List<string>(){ "ワープロの日" }},
            {"09-27", new List<string>(){ "女性ドライバーの日", "世界観光の日", "きぶなの日", "信州 火山防災の日" }},
            {"09-28", new List<string>(){ "パソコン記念日" }},
            {"09-29", new List<string>(){ "クリーニングの日", "招き猫の日", "接着の日" }},
            {"09-30", new List<string>(){ "くるみの日", "クレーンの日" }},
            {"10-01", new List<string>(){ "法の日", "印章の日", "日本酒の日", "メガネの日", "香水の日", "デザインの日", "福祉用具の日", "浄化槽の日", "電動工具の日", "国際音楽の日" }},
            {"10-02", new List<string>(){ "豆腐の日", "望遠鏡の日" }},
            {"10-03", new List<string>(){ "登山の日", "アンパンマンの日" }},
            {"10-04", new List<string>(){ "いわしの日", "天使の日", "陶器の日", "里親デー", "都市景観の日", "探し物の日", "証券投資の日" }},
            {"10-05", new List<string>(){ "時刻表記念日", "レモンの日", "折り紙供養の日", "音楽芸術の日", "統合医療の日" }},
            {"10-06", new List<string>(){ "国際協力の日" }},
            {"10-07", new List<string>(){ "ミステリー記念日" }},
            {"10-08", new List<string>(){ "木の日", "入れ歯の日", "足袋の日", "レーザーディスクの日", "骨と関節の日", "焼おにぎりの日" }},
            {"10-09", new List<string>(){ "トラックの日", "塾の日", "道具の日", "土偶の日", "金券の日", "共に守るマスクの日" }},
            {"10-10", new List<string>(){ "目の愛護デー", "釣りの日", "まぐろの日", "缶詰の日", "冷凍めんの日", "銭湯の日", "トレーナーの日", "totoの日", "JUJUの日", "ドラムの日", "ふとんの日" }},
            {"10-11", new List<string>(){ "鉄道安全確認の日", "ウィンクの日", "先住犬の日" }},
            {"10-12", new List<string>(){ "石油機器点検の日" }},
            {"10-13", new List<string>(){ "サツマイモの日", "引越しの日", "麻酔の日" }},
            {"10-14", new List<string>(){ "鉄道の日" }},
            {"10-15", new List<string>(){ "たすけあいの日", "きのこの日", "ぞうりの日" }},
            {"10-16", new List<string>(){ "ボスの日" }},
            {"10-17", new List<string>(){ "貯蓄の日", "上水道の日", "沖縄そばの日", "カラオケ文化の日", "秦野名水の日" }},
            {"10-18", new List<string>(){ "木造住宅の日", "統計の日", "冷凍食品の日", "ミニスカートの日", "フラフープ記念日" }},
            {"10-19", new List<string>(){ "バーゲンの日", "海外旅行の日", "相続税を考える日" }},
            {"10-20", new List<string>(){ "リサイクルの日", "新聞広告の日", "頭髪の日" }},
            {"10-21", new List<string>(){ "あかりの日" }},
            {"10-22", new List<string>(){ "方言の日", "絹婚記念日", "平安遷都の日", "アニメの日" }},
            {"10-23", new List<string>(){ "電信電話記念日", "津軽弁の日" }},
            {"10-24", new List<string>(){ "ツーバイフォー住宅の日", "文鳥の日" }},
            {"10-25", new List<string>(){ "リクエストの日", "民間航空記念日" }},
            {"10-26", new List<string>(){ "原子力の日", "サーカスの日" }},
            {"10-27", new List<string>(){ "読書の日", "世界新記録の日" }},
            {"10-28", new List<string>(){ "速記記念日", "反韓デー" }},
            {"10-29", new List<string>(){ "ホームビデオ記念日" }},
            {"10-30", new List<string>(){ "初恋の日", "食品ロス削減の日" }},
            {"10-31", new List<string>(){ "日本茶の日", "ガスの記念日", "陶彩の日" }},
            {"11-01", new List<string>(){ "犬の日", "紅茶の日", "玄米茶の日", "泡盛の日", "すしの日", "カーペットの日", "灯台記念日", "計量記念日", "点字記念日", "自衛隊記念日", "古典の日", "ソーセージの日", "いい医療の日" }},
            {"11-02", new List<string>(){ "阪神タイガース記念日", "タイツの日" }},
            {"11-03", new List<string>(){ "文化の日", "文具の日", "レコードの日", "ハンカチーフの日", "ゴジラの日", "いいお産の日", "いいレザーの日", "赤べこの日" }},
            {"11-04", new List<string>(){ "かき揚げの日", "消費者センター開設記念日" }},
            {"11-05", new List<string>(){ "電報の日", "雑誌広告の日", "津波防災の日" }},
            {"11-06", new List<string>(){ "お見合い記念日", "アパート記念日" }},
            {"11-07", new List<string>(){ "鍋の日", "知恵の日", "国有財産の日" }},
            {"11-08", new List<string>(){ "刃物の日", "ボイラーデー", "世界都市計画の日", "いい歯の日", "梱包の日" }},
            {"11-09", new List<string>(){ "119番の日", "換気の日", "太陽暦採用記念日", "歯ぐきの日" }},
            {"11-10", new List<string>(){ "エレベーターの日", "ハンドクリームの日", "技能の日", "無電柱化の日" }},
            {"11-11", new List<string>(){ "いい獣医の日", "ジュエリーデー", "サッカーの日", "くつしたの日", "電池の日", "配線器具の日", "煙突の日", "下駄の日", "おりがみの日", "鮭の日", "チーズの日", "もやしの日", "ピーナッツの日", "きりたんぽの日", "ポッキー&プリッツの日", "介護の日", "鏡の日", "ネイルの日", "チンアナゴの日" }},
            {"11-12", new List<string>(){ "皮膚の日" }},
            {"11-13", new List<string>(){ "うるしの日", "あいさつの日" }},
            {"11-14", new List<string>(){ "パチンコの日", "医師に感謝する日" }},
            {"11-15", new List<string>(){ "きものの日", "かまぼこの日", "こんぶの日", "いい遺言の日" }},
            {"11-16", new List<string>(){ "幼稚園記念日" }},
            {"11-17", new List<string>(){ "将棋の日", "蓮根の日", "ドラフト記念日" }},
            {"11-18", new List<string>(){ "土木の日", "音楽著作権の日" }},
            {"11-19", new List<string>(){ "緑のおばさんの日", "農協記念日" }},
            {"11-20", new List<string>(){ "毛皮の日", "ホテルの日", "ピザの日" }},
            {"11-21", new List<string>(){ "フライドチキンの日", "イーブイの日" }},
            {"11-22", new List<string>(){ "THANKS PETS DAY", "いい夫婦の日", "ボタンの日", "回転寿司記念日", "大工さんの日" }},
            {"11-23", new List<string>(){ "勤労感謝の日", "Jリーグの日", "ゲームの日", "カキの日", "外食の日", "手袋の日", "ワーク・ライフ・バランスの日", "いいふみの日" }},
            {"11-24", new List<string>(){ "鰹節の日", "オペラ記念日" }},
            {"11-25", new List<string>(){ "OLの日", "ハイビジョンの日" }},
            {"11-26", new List<string>(){ "ペンの日", "いい風呂の日", "ビン牛乳の日" }},
            {"11-27", new List<string>(){ "いい鮒の日" }},
            {"11-28", new List<string>(){ "税関記念日" }},
            {"11-29", new List<string>(){ "議会開設記念日", "いい服の日", "いい肉の日" }},
            {"11-30", new List<string>(){ "カメラの日", "鏡の日", "本みりんの日" }},
            {"12-01", new List<string>(){ "映画の日", "鉄の日", "カイロの日", "世界エイズデー" }},
            {"12-02", new List<string>(){ "ビフィズス菌の日" }},
            {"12-03", new List<string>(){ "カレンダーの日", "奇術の日", "妻の日", "コードレス電話の日", "個人タクシーの日", "ひっつみの日" }},
            {"12-04", new List<string>(){ "E.T.の日" }},
            {"12-05", new List<string>(){ "アルバムの日" }},
            {"12-06", new List<string>(){ "姉の日", "音の日" }},
            {"12-07", new List<string>(){ "クリスマスツリーの日" }},
            {"12-08", new List<string>(){ "太平洋戦争開戦記念日", "有機農業の日" }},
            {"12-09", new List<string>(){ "障害者の日" }},
            {"12-10", new List<string>(){ "M&Aの日", "ベルトの日", "ごめんねの日" }},
            {"12-11", new List<string>(){ "タンゴの日", "胃腸の日" }},
            {"12-12", new List<string>(){ "バッテリーの日", "漢字の日" }},
            {"12-13", new List<string>(){ "双子の日", "ビタミンの日" }},
            {"12-14", new List<string>(){ "討ち入りの日" }},
            {"12-15", new List<string>(){ "観光バス記念日" }},
            {"12-16", new List<string>(){ "電話の日", "紙の記念日" }},
            {"12-17", new List<string>(){ "飛行機の日" }},
            {"12-18", new List<string>(){ "東京駅の日" }},
            {"12-19", new List<string>(){ "日本初飛行の日" }},
            {"12-20", new List<string>(){ "シーラカンスの日", "霧笛記念日" }},
            {"12-21", new List<string>(){ "遠距離恋愛の日", "バスケットボールの日" }},
            {"12-22", new List<string>(){ "労働組合法制定記念日" }},
            {"12-23", new List<string>(){ "テレホンカードの日" }},
            {"12-24", new List<string>(){ "学校給食記念日" }},
            {"12-25", new List<string>(){ "スケートの日" }},
            {"12-26", new List<string>(){ "プロ野球誕生の日", "雪印の日" }},
            {"12-27", new List<string>(){ "浅草仲見世記念日" }},
            {"12-28", new List<string>(){ "ディスクジョッキーの日", "身体検査の日", "シネマトグラフの日" }},
            {"12-29", new List<string>(){ "シャンソンの日", "清水トンネル貫通記念日" }},
            {"12-30", new List<string>(){ "地下鉄記念日" }},
            {"12-31", new List<string>(){ "ベルボトム・ジーンズの日" }}

        };

        string pattern = @"(1[0-2]|0?[1-9])[-月/]([1-2][0-9]|3[0-1]|0?[1-9])[日]?";


        public MainForm()
        {
            InitializeComponent();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            string text = Replace(textBox1.Text);
            textBox2.Text = text;
        }

        private string Replace(string text)
        {
            string replacedText = Regex.Replace(text, pattern, match =>
            {
                int month = int.Parse(match.Groups[1].Value);
                int day = int.Parse(match.Groups[2].Value);

                // 日付が有効か確認
                bool isValidDate = DateTime.TryParse($"{month}/{day}/2000", out DateTime parsedDate);

                // 有効な日付ならフォーマットを変更、そうでなければそのまま
                return isValidDate ? GetRandomItem(converter[parsedDate.ToString("MM-dd")]) : match.Value;
            });

            if(true)
            {
                replacedText = Regex.Replace(replacedText, "クリスマス", match =>
                {
                    return GetRandomItem(converter["12-25"]);
                });

            }

            return replacedText;

        }

        static T GetRandomItem<T>(List<T> list)
        {
            if (list == null || list.Count == 0)
            {
                throw new ArgumentException("The list cannot be null or empty.");
            }

            Random random = new Random();
            int randomIndex = random.Next(list.Count); // ランダムなインデックスを生成
            return list[randomIndex]; // ランダムな要素を返す
        }


    }
}

アプリの使い方

左側のテキストボックスに入力するだけです。今回はトティ衛門に詩を書いてもらいました。今日はクリスマスなので、特別に「クリスマス」も変換しました。
image.png

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?