❌ . が「任意の1文字」にマッチしてしまう
re.search(r"3.14", "3X14")  # . は任意の文字にマッチ!

✅ リテラルのドットは \. とエスケープする: r"3\.14"

❌ .* が貪欲にマッチする(グリーディ)
re.search(r"<.*>", "<a>テスト</a>")
# → <a>テスト</a> 全体にマッチしてしまう

✅ 非貪欲マッチは .*? を使う: r"<.*?>"<a> だけにマッチ

💡 正規表現のテストツール

regex101.com などのオンラインツールで正規表現をリアルタイムにテストできます。
パターンを入力するとどこにマッチするか視覚的に確認できて便利です。