【Python】正規表現の使い方 (reモジュール)

この記事では、正規表現を使う方法をソースコード付きで解説します。

正規表現とは

正規表現とは、「文字列のパターンを示した式」です。
通常、文字列を探索する場合は、「hello」や「100」などと直接単語や数値を検索します。
しかし、この方法では例えば「5桁以上の数値」というように複雑な場合は探せません。
このような場合に、正規表現を使うと簡単に検索パターンを作って探すことができます。
本記事では、Pythonとreモジュールを用いた正規表現の使い方を紹介します。

正規表現のパターン式

正規表現の代表的なパターン式は以下の通りです。

パターン式 内容
[ ] [ ] 内に指定した文字のどれかと一致
[^ ] [ ] 内に指定した文字でない場合に一致する
^ 行頭と一致
$ 行末と一致
. 任意の1文字と一致
( ) 正規表現をグループにまとめる
| 前後にある正規表現のいずれかと一致
+ 直前の正規表現の1回以上の繰り返しに一致
? 直前の正規表現に0回 or 1回一致
{m,n} 直前の正規表現のm~n回の繰り返しに一致
+? 直前の正規表現の1回以上の繰り返しに一致
*? 直前の正規表現の0回以上の繰り返しに一致
?? 直前の正規表現に0回もしくは1回一致
* 直前の正規表現の0回以上の繰り返しに一致
{m,n}? 直前の正規表現のm~n回の繰り返しに一致
\ メタ文字を打ち消す
\A 文字列の先頭と一致
\b 単語境界と一致 (\w と \W の間の空文字列と一致)
\B \B 以外と一致
\d 数字と一致 ( [0-9] と同じ )
\D \d以外と一致
\s 空白文字と一致
\S \s 以外と一致
\w 英数字とアンダースコア_に一致
\W \w 以外と一致
\Z 文字列の末尾と一致

例えば、hel[lL]oと書くと、helloとhelLoを探索します。
このように正規表現のパターン式を用いることで、複雑なパターンを簡単に記述できます。

reモジュールで正規表現

Pythonの標準モジュールreでは、パターン式と一致するデータを探すための関数としてmatch()、search()、findall()、finditer()の4種類が用意されています。
Pythonとreを用いた正規表現による探索のサンプルコードを紹介します。

matchのサンプルコード

match()は、文字列の先頭でパターンが一致するかを判定します。

■実行結果

abc

searchのサンプルコード

search()は、パターンと一致する部分があるかどうかを判定します。
一致する部分が複数ある場合は、最初の部分のみ返します。
(matchとの違いは、文字列の先頭でなくても一致の判定をします)

■実行結果

defg
3
7
(3, 7)

findallのサンプルコード

findall()は、パターンと一致するすべての部分を判定します。
(search()との違いは、一致した箇所をすべて取得します)
注意点としては、探索結果をオブジェクトでなく配列(リスト)で返します。


■実行結果

['defg', 'defg']

finditerのサンプルコード

finditerは、パターンと一致する部分を判定します。
これさえあれば、上の3つの関数でできることはすべてできます。

■実行結果

defg
3
7
(3, 7)
defg
17
21
(17, 21)

【関連記事】
Python入門 基本文法

シェア&フォローお願いします!