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

Python正規表現の特殊文字「.」「?」「*」の違いをわかりやすく解説

はじめに

Pythonの正規表現(reモジュール)では、特定の意味を持つ特殊文字がいくつか用意されています。その中でも頻繁に使われるのが「.(ドット)」「?(クエスチョンマーク)」「*(アスタリスク)」の3つです。それぞれ役割が異なるため、違いをしっかり理解しておくことが重要です。

特殊文字「.」(ドット)

ドットは「任意の1文字」にマッチします。

デフォルトのモードでは、改行文字以外のあらゆる1文字と一致します。例えば a.c というパターンは、「abc」「a1c」「a c」などにマッチします。

ただし、re.DOTALL フラグを指定した場合は、改行文字も含めたすべての文字にマッチするようになります。

import re

# デフォルト:改行にはマッチしない
print(re.match('a.c', 'abc'))   # マッチする

# DOTALLフラグ:改行にもマッチする
print(re.match('a.c', 'a\nc', re.DOTALL))  # マッチする

特殊文字「?」(クエスチョンマーク)

直前の要素が「0回または1回」出現することを表します。

つまり、直前の文字やグループがあってもなくてもマッチします。例えば ab? は「a」または「ab」のどちらにもマッチします。

import re

print(re.fullmatch('ab?', 'a'))    # マッチする
print(re.fullmatch('ab?', 'ab'))   # マッチする
print(re.fullmatch('ab?', 'abb'))  # マッチしない

特殊文字「*」(アスタリスク)

直前の要素が「0回以上」繰り返されることを表します。

できるだけ多くの繰り返しにマッチしようとする(貪欲なマッチ)点が特徴です。例えば ab* は「a」「ab」「abb」「abbbb」など、「a」の後に「b」がいくつ続いていてもマッチします。

import re

print(re.fullmatch('ab*', 'a'))       # マッチする
print(re.fullmatch('ab*', 'ab'))      # マッチする
print(re.fullmatch('ab*', 'abbb'))    # マッチする
print(re.fullmatch('ab*', 'ba'))      # マッチしない

「?」と「*」の違いまとめ

特殊文字意味マッチ例(ab? / ab*)
.任意の1文字(改行を除く)
?直前の要素が0回または1回「a」「ab」
*直前の要素が0回以上「a」「ab」「abbb…」

このように、「?」は最大1回までしか繰り返しを許さないのに対し、「*」は無制限に繰り返しを許す点が大きな違いです。用途に応じて使い分けることで、柔軟で正確なパターンマッチングを実現できます。

  1. Pythonのtkinterとtkinter.ttkウィジェットの違いとは?スタイリング方法を解説

    tkinter.ttkは、tkinterウィジェットのスタイル(見た目)を設定するためのモジュールです。HTML要素にCSSでデザインを適用するように、tkinter.ttkを使うことでtkinterウィジェットの外観を自由にカスタマイズできます。 tkinterウィジェットとtkinter.ttkの主な違い tkinterウィジェットは、ボタン・ラベル・テキスト・スクロールバーなど、基本的なGUI部品を追加するために使用します。一方、tkinter.ttkは標準のtkinterよりも多くの種類のウィジェットをサポートしています。 tkinter.ttkではPlaceやPack()、Grid

  2. Pythonの「except Exception as e」と「except Exception, e」の違いは何ですか?

    except文における「,(カンマ)」と「as」の違い Pythonのexcept文で発生した例外を変数に代入する際には、「カンマ(,)」を使う書き方と「as」を使う書き方の2通りがあります。結論から言うと、両者は機能的にはほぼ同じですが、どちらが使えるかはPythonのバージョンによって異なります。 バージョンごとの使い分け Python 2.5以前:「as」構文がサポートされていないため、カンマを使う必要があります。 Python 2.6〜2.7:カンマと「as」のどちらも使用できます。 Python 3.x以降:例外を変数に代入するには「as」が必須となり、カンマ形式は構文エラーにな