正規表現

文字クラス_key-visual

マッチしやすく

 前回に引き続きメタキャラクタの解説です。

今回は、文字クラスと呼ばれている [ ] についてです。

文字クラスを使うと、[ ] の中にある文字のどれかにマッチさせる事ができます。

この事はパターンの構築を単一な文字だけでなく、一定の範囲を持った集合として構成可能なことを意味します。

文字クラスのイメージ 正規表現_文字クラス概念図のフローチャート


連続した範囲 [ - ]

 - を用いることで、連続した文字の範囲をまとめて指定できます。

それ故に、[0-9] なら 0 or 1 or 2 ,,, 9 即ち数字を表します。

この他の代表的なパターンを以下に挙げます。

正規表現 説明
[0-9] 数字
[A-Z] アルファベットの大文字
[a-z] アルファベットの小文字
[A-Za-z] アルファベットの大文字と小文字
[A-z] アルファベットの大文字と小文字。この他に [ \ ] ^ _ `
[ぁ-ん] ひらがな
[ァ-ヴ] カナカナ
[ァ-ヶ] カナカナ(ヵ ヶ を含む)
[ヲ-゚] 半角カタカナ

指定した文字以外 [^ ]

 文字クラスは、 ^ と組み合わせて [^ ] とすることにより、指定した集合以外の文字にマッチします。

例を挙げると [^abc] なら abc 以外の文字にマッチします。

[ ] 内はメタ文字が無効

 [ ] 中のメタ文字は、いくつかの例外を除いて無効になります。

その例外となるメタキャラクタは、 - ^ ] \ です。

 これらは [ ] 内でも特殊な意味を持ちます。

但し少々細かい話になりますが、この4つは記述される位置により無効になります。

具体的には ^ は先頭で使われた場合にのみ、上記のような補集合の効果を発生させます。

- は先頭や末尾では範囲を表す効果は無くなります。

] については先頭に配置すれば無効です。

これ以外の位置、あるいは \ は エスケープする必要があります。

 それでは実際にコード上で実行してみましょう。


この記事の難度は、基礎  Cクラスです。

(A: やさしい   →   E: 難しい)

事前知識として、pythonから正規表現を扱う方法が必要になります。

また文字クラスの少々細かい箇所まで扱います。

難度       :
事前知識: Pythonの基礎文法(reモジュールを含む)
学習効果: 文字クラスを細部まで理解できる。

Contens  |   目次

Chapter1 Pythonで実行

Chapter1   Pythonで実行

文字集合の指定 [ ]

 マッチさせたい単語が、 link rink の両方である場合を考えましょう。

上の二つは、3文字目以降は ink で同様ですが、1文字目は lr で異なります。

そこで [ ] の中に lr を指定して [lr] とします。

こうする事で、 lr のどちらかにマッチするので "[lr]ink" というパターンで2つともマッチします。

    re_meta2_1.py

        import  re

        pattern = re.compile("[lr]ink")
        st ="link pink rink"
        result = pattern.findall(st)
        print(result)
                            


実行結果 正規表現の文字クラス1

link と rink にマッチしています。

連続した文字の範囲 [ - ]

 次の単語の中から 1 ~ 3 までの数字だけにマッチさせたいとします。

第一位   第2位   第サン位   No.3   第4位

これには - を使って 1 ~ 3 までの数字をパターンに指定すればよさそうです。

    re_meta2_2.py

        import  re

        pattern = re.compile("[1-3]")
        st ="第一位 第2位 第サン位 No.3 第4位"
        result = pattern.findall(st)
        print(result)
                            


実行結果 正規表現の文字クラス2

狙い通り 2 と 3 のみが一致しました。

指定した文字以外 [^ ]

 [^ ] を用いて、半角カタカナを除いた文字にマッチさせてみます。

対象となる文字列は、五5ゴゴ としましょう。

この中の ゴ 以外の文字に一致するようにします。

    re_meta2_3.py

        import  re

        pattern = re.compile("[^ヲ-゚]")
        st ="五5ゴゴ"
        result = pattern.findall(st)
        print(result)
                            


実行結果 正規表現の文字クラス3

半角カタカナは除外されています。

メタ文字が無効

 [ ] 中で - ^ ] \ 以外のメタ文字なら無効になる事を確認します。

例として .+*?$|{3}() を試してみます。

    re_meta2_4.py

        import  re

        pattern = re.compile("[.+*?$|{3}()]")
        st =".+*?$|{3}()"
        result = pattern.findall(st)
        print(result)
                            


実行結果 正規表現の文字クラス4

メタ文字の特殊効果は打ち消されています。

先頭以外の ^

 ^ は先頭以外で使われた場合には、補集合の効果が無くなります。

    re_meta2_5.py

        import  re

        pattern = re.compile("[*^]")
        st ="2*2 3^3"
        result = pattern.findall(st)
        print(result)
                            


実行結果 正規表現の文字クラス5

先頭や末尾の -

 - は、先頭や末尾なら範囲を表す特殊効果は無効です。

    re_meta2_6.py

        import  re

        pattern = re.compile("[-3]")
        st ="1-3"
        result = pattern.findall(st)
        print(result)
                            


実行結果 正規表現の文字クラス6

先頭の ]

 ] は先頭に配置する事で無効になります。

    re_meta2_7.py

        import  re

        pattern = re.compile("[][]")
        st ="[]"
        result = pattern.findall(st)
        print(result)
                            


実行結果 正規表現の文字クラス7

  \

 \ は、エスケープする必要があります。

    re_meta2_8.py

        import  re

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


実行結果 正規表現の文字クラス8

\ n の文字そのものにマッチした事が確認できました。



 文字クラスの解説は以上です。

少々細かいところまで立ち入りました。

一つ一つ確実におさえた事で、応用の際にも対応出来る力が身に付きました。

関連記事

基礎1 文字クラス_key-visual

[ ] 文字集合を指定する

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

\d 数字を指定する

正規表現: 文字クラス
難度       : 基礎
事前知識: Pythonの基礎文法(reモジュールを含む)
学習効果: \d を用いて、数字を 狭義/広義 にマッチさせる事が出来るようになる。
基礎1 文字クラス_key-visual

\D 数字以外を指定する

正規表現: 文字クラス
難度       : 入門〜基礎
事前知識: Pythonの基礎文法。正規表現の文字クラス等。
学習効果: \D を用いて、数字以外を 狭義/広義 にマッチさせる事が出来るようになる。
基礎1 文字クラス_key-visual

\w 単語構成文字

正規表現: 文字クラス
難度       : 基礎
事前知識: Pythonの基礎文法。正規表現の文字クラス等。
学習効果: \w を用いて、単語構成文字を 狭義/広義 にマッチさせる事が出来るようになる。
基礎1 文字クラス_key-visual

\W 単語構成文字以外

正規表現: 文字クラス
難度       : 基礎
事前知識: Pythonの基礎文法。正規表現の文字クラス等。
学習効果: \W を用いて、単語構成文字以外を 狭義/広義 にマッチさせる事が出来るようになる。
基礎1 文字クラス_key-visual

\s 空白文字を指定する

正規表現: 文字クラス
難度       : 基礎
事前知識: Pythonの基礎文法。正規表現の文字クラス等。
学習効果: \s を用いて、空白文字を 狭義/広義 にマッチさせ、余白を適切に消す事が出来るようになる。
基礎1 文字クラス_key-visual

\S 空白以外を指定する

正規表現: 文字クラス
難度       : 入門〜基礎
事前知識: Pythonの基礎文法。正規表現の文字クラス等。
学習効果: \S を用いて、空白文字以外を 狭義/広義 にマッチさせ、余白以外の文字を取得できる。
基礎1 文字クラス_key-visual

. 改行以外の任意の1文字

正規表現: 文字クラス
難度       : 入門〜基礎
事前知識: Pythonの基礎文法。エスケープ文字である \ (バックスラッシュ)等。
学習効果: . を用いて、幅広いマッチが出来るようになる。
Pythonで正規表現を使う1

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

正規表現: Pythonから使う
難度       : 入門
事前知識: Pythonの基礎文法
学習効果: pythonから正規表現を使う一連の流れを掴む
メタキャラクタに馴染む_key-visual

ハロー ! メタキャラクタ

正規表現: メタキャラクタの概要
難度       : 入門
事前知識: 不要
学習効果: メタキャラクタの概要を掴む
正規表現の概要_key-visual

正規表現とは?

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

PR