正規表現

エスケープ文字の働き_key-visual

特殊効果の発生と無効

 今回からは、個別のメタキャラクタの解説に入ります。

最初に エスケープ文字である \ (バックスラッシュ) を取り扱ってしまいます。

(注: \ は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)
                            


実行結果 正規表現のはじめにで/バックスラッシュ1

改行されています。

\\n

 次に、この打ち消しに \(バックスラッシュ) を使ってみましょう。

    re_meta1_2.py

        st ="a\\nc"
        print(st)
                            


実行結果 正規表現のはじめにで/バックスラッシュ2

改行が無効になり、\ と n の文字そのものになりました。

 同様に、reモジュールでも実行してみます。

改行ではなく、\ と n の文字自体にマッチするかどうか試します。

    re_meta1_3.py

        import  re

        pattern = re.compile("\\n")
        st ="a\\nc"
        result = pattern.search(st)
        print(result)
                            


実行結果 正規表現のはじめにで/バックスラッシュ3

マッチしていません。

改行を無効にできていない為です。

 実はこの場合、改行を無効にするには \ を4個重ねる必要があります。

    re_meta1_4.py

    import  re

    pattern = re.compile("\\\\n")
    st ="a\\nc"
    result = pattern.search(st)
    print(result)
                        


実行結果 正規表現のはじめにで/バックスラッシュ4

マッチしました。

 しかし、 あまたの \ はコードの視認性を低下させます。

そこで、これを解決するにはraw文字列記法を使います。

raw文字列記法

 文字列の前に r 又は R を付ける事で、バックスラッシュの特殊解釈を無効にできます。

    re_meta1_5.py

    st =r"a\nc"
    print(st)
                        


実行結果 正規表現のはじめにで/バックスラッシュ5

改行効果が無くなリました。

 このraw文字列記法を使う事で、reモジュールで改行を無効にするのに、 \ を4個重ねる事は不要になります。

    re_meta1_6.py

    import  re

    pattern = re.compile(r"\\n")
    st ="a\\nc"
    result = pattern.search(st)
    print(result)
                        


実行結果 正規表現のはじめにで/バックスラッシュ6

\ と n の文字そのものにマッチしています。



 これにて \ (バックスラッシュ) については終わりです。

エスケープ文字の働きを理解する事ができました。

関連記事

基礎1

[ ] 文字集合を指定する

正規表現: 文字クラス
難度       : 基礎
事前知識: Pythonの基礎文法(reモジュールを含む)
学習効果: 文字クラスを細部まで理解できる。
メタキャラクタに馴染む_key-visual

ハロー ! メタキャラクタ

正規表現: メタキャラクタの概要
難度       : 入門
事前知識: 不要
学習効果: メタキャラクタの概要を掴む
Pythonで正規表現を使う1

正規表現をPythonから使うには ?

正規表現: Pythonから使う
難度       : 入門
事前知識: Pythonの基礎文法
学習効果: pythonから正規表現を使う一連の流れを掴む
正規表現の概要

正規表現とは?

正規表現: 概要
難度       : 入門
事前知識: 不要
学習効果: 正規表現の概要を知る
正規表現の概要

PR