正規表現の特殊シーケンスについて、紹介します。
本記事では、下記の内容を紹介しています。
この記事で分かること
- 特殊シーケンスとは
- 特殊シーケンスを用いたサンプルコード
Pythonの正規表現については、以下の記事も併せて参考にしてみてください。
【Python】正規表現の基本的な使用方法【reモジュール】
【Python】正規表現の具体的な使用例【日付、電話番号、メールアドレス、URL】
【Python】reモジュールのcompile関数の使い方
【Python】正規表現の貪欲・非貪欲マッチ
スポンサーリンク
正規表現の特殊シーケンスとは
特殊シーケンスを用いることで、アルファベットや数字などの集合を簡潔に記述することができます。
特殊シーケンスは、バックスラッシュ(または、円マーク)の後に、文字を入力することで表現します。
特殊シーケンスについては、Pythonの公式ドキュメントにも記述があります。併せて参考にしてみてください。
おそらく最も重要な特殊文字はバックスラッシュ \ でしょう。
Python公式ドキュメント 抜粋
Python の文字列リテラルのようにバックスラッシュに続けていろいろな文字を入力することでいろいろな特殊シーケンスの合図を送ることができます。
・・・
'\' で始まるいくつかの特殊シーケンスは、数字、アルファベット、空白文字以外など、よく使う文字集合を表しています。
一つ例をお見せしましょう: \w は任意の英数字文字にマッチします。バイト列パターンに対しては、これは文字クラス [a-zA-Z0-9_] と等価です。
使用頻度の多い、特殊シーケンスは以下のとおりです。
記号 | 説明 | 対応する表記 |
---|---|---|
\d | 全ての数字 | [0-9] |
\D | 全ての数字以外 | [^0-9] |
\w | 全ての英数字とアンダーバー | [a-zA-Z0-9_] |
\W | 全ての英数字とアンダーバー以外 | [^a-zA-Z0-9_] |
\l | 半角英小文字 | [a-z] |
\L | 半角英小文字以外 | [^a-z] |
\u | 半角英大文字 | [A-Z] |
\U | 半角英大文字以外 | [^A-Z] |
以降では、特殊シーケンスを使用しない場合、使用した場合のサンプルコードを紹介します。
スポンサーリンク
特殊シーケンスのサンプルコード
特殊シーケンスのサンプルコードを紹介します。
例題として、以下の文字列から電話番号を抽出します。
s = 'ページ番号:123 更新日:2022/11/2' + '\n' + \
'○○区役所庁舎案内' + '\n' + \
'電話:03-1234-5566(代表)'+ '\n' + \
'特設サイト:https://www.city.xxx.tokyo.jp/toiawase/'
特殊シーケンスを使用しない例
はじめに、特殊シーケンスを使用しない場合を紹介します。
以下、サンプルコードです。
import re
pattern = r'[(]?[0-9]{2,4}[-)]?[0-9]{2,4}-[0-9]{3,4}'
res = re.findall(pattern, s)
print(res)
# ['03-1234-5566']
簡単にパターンの解説をすると・・・
[(]? : (を、0または1回繰り返し
[0-9]{2,4} : 数字を2~4回繰り返し
[-)]? : -または)を、0または1回
特殊シーケンスを使用した例
次に、特殊シーケンスを使用した場合を紹介します。
以下、サンプルコードです。
import re
pattern = r'[(]?\d{2,4}[-)]?\d{2,4}-\d{3,4}'
res = re.findall(pattern, s)
print(res)
# ['03-1234-5566']
数字の集合を表す記述が、[0-9]から\dに入れ替わっています。
特殊シーケンスを使用しない場合は、数字の集合を表す[0-9]と、繰り返し回数を表す{2, 4}などがごちゃごちゃしていました。
特殊シーケンスを使用することで、可読性も向上していると思います。
正規表現に関しては、他にも使用方法をまとめています。併せて参考にしてみてください。
【Python】正規表現の基本的な使用方法【reモジュール】
【Python】正規表現の具体的な使用例【日付、電話番号、メールアドレス、URL】
【Python】reモジュールのcompile関数の使い方
【Python】正規表現の貪欲・非貪欲マッチ
スポンサーリンク