正規表現入門
\ エスケープ文字の働き
カテゴリー:メタ文字の概要
特殊効果の発生と無効
今回からは、個別のメタキャラクタの解説に入ります。
最初に エスケープ文字である \ (バックスラッシュ) を取り扱ってしまいます。
(注: \ はWindowsでは円マークです)。
メタキャラクタ全体に共通する話だからです。
特殊効果を発生させる
\ (バックスラッシュ)の働きとして、 \ (バックスラッシュ)の後に特定の文字がある場合には、特殊効果を発生させる事です。
これは エスケープシーケンス と呼ばれているもので、例えば \n は改行を表します。
特殊効果を無効にする
また \ (バックスラッシュ)は、メタキャラクタの持つ特殊効果を無効にできます。
一例を挙げると . は任意の一文字を表すメタキャラクタですが、これを . の文字そのものとして使う際には \. とします。
ではエスケープシーケンスも同様に処理できるのでしょうか?
これは少し注意が必要になるので、例として \n を取り上げながら以下で説明していきます。
この記事の難度は、入門 Aクラスです。
(A: やさしい → E: 難しい)
事前知識として、pythonから正規表現を扱う方法が必要になります。
但し入門程度で充分です。
難度 : | |
事前知識: | Pythonの基礎文法(reモジュールを含む) |
学習効果: | エスケープ文字の働きを理解できる。 |
Contens | 目次
Chapter1 | Pythonで実行 |
Chapter1 Pythonで実行
\n
先ずは、エスケープシーケンスである \n を確認してみましょう。
re_meta1_1.py st ="a\nc" print(st)
実行結果
改行されています。
\\n
次に、この打ち消しに \(バックスラッシュ) を使ってみましょう。
re_meta1_2.py st ="a\\nc" print(st)
実行結果
改行が無効になり、\ と n の文字そのものになりました。
同様に、reモジュールでも実行してみます。
改行ではなく、\ と n の文字自体にマッチするかどうか試します。
re_meta1_3.py import re pattern = re.compile("\\n") st ="a\\nc" result = pattern.search(st) print(result)
実行結果
マッチしていません。
改行を無効にできていない為です。
実はこの場合、改行を無効にするには \ を4個重ねる必要があります。
re_meta1_4.py import re pattern = re.compile("\\\\n") st ="a\\nc" result = pattern.search(st) print(result)
実行結果
マッチしました。
しかし、 あまたの \ はコードの視認性を低下させます。
そこで、これを解決するにはraw文字列記法を使います。
raw文字列記法
文字列の前に r 又は R を付ける事で、バックスラッシュの特殊解釈を無効にできます。
re_meta1_5.py st =r"a\nc" print(st)
実行結果
改行効果が無くなリました。
このraw文字列記法を使う事で、reモジュールで改行を無効にするのに、 \ を4個重ねる事は不要になります。
re_meta1_6.py import re pattern = re.compile(r"\\n") st ="a\\nc" result = pattern.search(st) print(result)
実行結果
\ と n の文字そのものにマッチしています。
これにて \ (バックスラッシュ) については終わりです。
エスケープ文字の働きを理解する事ができました。
関連記事
[ ] 文字集合を指定する
正規表現: | 文字クラス |
難度 : | 基礎 |
事前知識: | Pythonの基礎文法(reモジュールを含む) |
学習効果: | 文字クラスを細部まで理解できる。 |
ハロー ! メタキャラクタ
正規表現: | メタキャラクタの概要 |
難度 : | 入門 |
事前知識: | 不要 |
学習効果: | メタキャラクタの概要を掴む |
正規表現をPythonから使うには ?
正規表現: | Pythonから使う |
難度 : | 入門 |
事前知識: | Pythonの基礎文法 |
学習効果: | pythonから正規表現を使う一連の流れを掴む |
正規表現とは?
正規表現: | 概要 |
難度 : | 入門 |
事前知識: | 不要 |
学習効果: | 正規表現の概要を知る |
PR