❌ . が「任意の1文字」にマッチしてしまう
re.search(r"3.14", "3X14") # . は任意の文字にマッチ!
✅ リテラルのドットは \. とエスケープする: r"3\.14"
❌ .* が貪欲にマッチする(グリーディ)
re.search(r"<.*>", "<a>テスト</a>") # → <a>テスト</a> 全体にマッチしてしまう
✅ 非貪欲マッチは .*? を使う: r"<.*?>" → <a> だけにマッチ
💡 正規表現のテストツール
regex101.com などのオンラインツールで正規表現をリアルタイムにテストできます。
パターンを入力するとどこにマッチするか視覚的に確認できて便利です。