本記事ではPythonにおける正規表現の特殊記号と記述方法について説明します。
正規表現はソースコードの記述量を減らし可読性を上げることができるため、Pythonに限らずプログラミングにおいて重要な要素です。
よりわかりやすいプログラムを目指すために理解しておきましょう。
本記事の内容は以下の通り。
・Pythonの正規表現で用いる特殊記号
・Python正規表現(reライブラリ)のメソッド
目次
Pythonの正規表現で用いる特殊記号
開始 | ^ |
終了 | $ |
改行以外の一字 | . |
英字・小文字 | [a-z] |
英字・小文字 | [A-Z] |
数字 | [0-9] |
英数字 | [a-zA-Z0-9] |
スペース | s |
0回以上の繰り返し | * |
1回以上の繰り返し | + |
n回の繰り返し | {n} |
n回以上の繰り返し | {n,} |
n回以上m回以下の繰り返し | {n,m} |
省略可 | ? |
OR | | |
スペース以外の一字 | S |
他の記号もありますが、とりあえずはこれだけ覚えておけばだいたいの表現はできます。
正規表現と繰り返しの表現
正規表現で繰り返しを表現する方法としては主に以下の3つの方法があります。
・正規表現で0回以上の繰り返しは「*」(アスタリスク)を使う
・正規表現で1回以上の繰り返しは「+」を使う
・正規表現におけるn回の繰り返しは「{n}」を使う
1 2 3 | import re pattern = re.compile('[a-z]*') pattern.match('abcdef') |
◆実行結果
1 | <re.Match object; span=(0, 5), match='acdef'> |
◆1回以上の数字を指定する例
1回以上の数字をマッチさせる例です。
1 2 3 | import re pattern = re.compile('[0-9]+') pattern.match('0123456789') |
◆実行結果
1 | <re.Match object; span=(0, 10), match='0123456789'> |
◆5回以上10回以下の英数字を指定する例
5文字以上10文字以下の英数字をマッチさせる例です。
1 2 3 | import re pattern = re.compile('[a-z0-9]+') pattern.match('0123abcde') |
◆実行結果
1 | <re.Match object; span=(0, 9), match='0123abcde'> |
正規表現で部分一致や完全一致をチェックする表現
前方一致は「^」や「A」、後方一致は「$」や「Z」でチェックします。
完全一致したい場合はそれぞれの記号を併せて「^あいうえお$」のように記述します。
部分一致の場合は「^.*あいうえお.*$」のように前方と後方に「改行以外の1文字以上」を意味する「.*」を記述します。
Python正規表現の記号エスケープ処理
前述の表にあるドットやハイフンはそのままだと特殊記号として扱われてしまうため、バックスラッシュによるエスケープが必要です。
特殊文字のエスケープを行う場合はバックスラッシュ()を記号の直前に挿入します。
1 | . |
()や{}はそれぞれのエスケープが必要です。
1 | (abc) |
Python正規表現でピリオド(ドット)を使う方法
Pythonの正規表現でピリオド(ドット)を指定する場合はバックスラッシュでエスケープして「.」のように指定します。
エスケープが必要な理由は正規表現におけるドットが「改行以外の1字」を意味するためです。
関連記事>>正規表現でピリオド(ドット)を指定するには?
Python正規表現でハイフンを使う方法
Pythonの正規表現でハイフンを指定する場合はバックスラッシュでエスケープして「-」のように指定します。
エスケープが必要な理由は正規表現におけるハイフンが数字を示す[0-9]や英字を示す[a-z]などの補助記号として使われているためです。([]外でハイフンを使う場合は不要)
Python正規表現でスペースを使う方法
スペースはそのまま使用することも可能ですが、全角・半角は別の文字として区別されます。
全角と半角の両方をマッチさせたい場合は「s」を使うことでマッチ可能です。
正規表現でスペースを記述する方法+Pythonサンプルコード
「S」を指定するとスペース以外の1字とマッチすることができます。
Python正規表現でタブを使う方法
タブもそのままコードに記述できますが、スペースと区別がつきにくくソースコードの可読性が下がるので特殊記号を使用しましょう。
特殊記号は「t」を指定します。
Python正規表現で英数字を使う方法
正規表現で英数字を指定する場合は「[0-9]」のように「[]」の中に指定します。
ハイフンを使うことで範囲指定することも可能です。
Python正規表現(reライブラリ)のメソッド
Pythonで正規表現を使用する場合はライブラリ「re」を使う必要があります。
Pythonに標準でインストールされているため、importするだけで使用することができます。
下記の例は「文字列が『こんにちは』を含むか」を定義したものです。マッチングを行なった場合「こんにちは」を含む全ての文字列に対して「TRUE」を返します。
◆記述内容
正規表現を使えば
1 2 3 4 5 6 7 8 9 10 11 | # ライブラリを読み込む import re greeting = 'こんにちは' # reのcompile()メソッドで正規表現を定義 a = re.compile("^S*こんにちはS*$") # これで全てのパターンに対応できる。パターンが増えても修正不要 if a.match(greeting): print('こんにちは') |
よく使うメソッドである「re.compile()」、「re.search()」、「re.match()」の3つについて紹介します。
re.compile()
正規表現を比較できる形に変換するメソッドです。
◆使用例
1 2 | # reのcompile()メソッドで正規表現を定義 a = re.compile("^S*こんにちはS*$") |
re.search()
正規表現のマッチング処理を行うメソッドです。
文字列の全文を検索してマッチする文字列があるかチェックします。
◆使用例
1 2 3 4 5 6 7 | import re # 先に「re.compile()」で変換が必要です。 a = re.compile("こんにちは") # if a.search('やあ、こんにちは'): print('こんにちは') |
re.match()
正規表現のマッチング処理を行うメソッドです。
文字列の先頭がパターンとマッチするかチェックします。
◆使用例
1 2 3 4 5 6 7 | import re # 「re.match()」の場合は特殊記号を使わないと先頭しかマッチしません。 a = re.compile("^.*こんにちは.*$") # if a.match('やあ、こんにちは'): print('こんにちは') |
他の正規表現やreライブラリのメソッドについては
公式ドキュメントをお読みください。
こちらで簡単な正規表現のチェックができるので興味があったら覗いてみてください。
>>正規表現チェッカー for Python
まとめ
コンピュータはちょっとした言葉の違いであっても違う単語として認識してしまいます。
正規表現を用いることで「こんにちは」、「こんにちは!」、「こんにちはー」などの表記の揺れを同じ言葉として認識させることが可能です。
表記の違いを同じ言葉として認識できると記述するコードが短くなるため、可読性も上がり修正にかかる時間も減ります。
パターンの追加もほぼ不要となります。
正規表現を活用することでコード作成の効率化や可読性の向上にもなるので是非習得するようにしましょう。
PtyhonまとめTOP>>Pythonプログラミングの始め方まとめ
Pythonの正規表現については「公式ドキュメント」も併せてお読みだくさい。
◆関連記事
おすすめ記事>>PythonにおすすめのノートPC4選+パソコンの選び方