正規表現入門
\ エスケープ文字の働き
カテゴリー:メタ文字の概要
                特殊効果の発生と無効
今回からは、個別のメタキャラクタの解説に入ります。
最初に エスケープ文字である \ (バックスラッシュ) を取り扱ってしまいます。
(注: \ は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から正規表現を使う一連の流れを掴む | 
                            正規表現とは?
| 正規表現: | 概要 | 
| 難度 : | 入門 | 
| 事前知識: | 不要 | 
| 学習効果: | 正規表現の概要を知る |