正規表現基礎
[ ] 文字集合を指定する
カテゴリー:文字クラス
マッチしやすく
前回に引き続きメタキャラクタの解説です。
今回は、文字クラスと呼ばれている [ ] についてです。
文字クラスを使うと、[ ] の中にある文字のどれかにマッチさせる事ができます。
この事はパターンの構築を単一な文字だけでなく、一定の範囲を持った集合として構成可能なことを意味します。
文字クラスのイメージ
連続した範囲 [ - ]
- を用いることで、連続した文字の範囲をまとめて指定できます。
それ故に、[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文字目は l と r で異なります。
そこで [ ] の中に l と r を指定して [lr] とします。
こうする事で、 l と r のどちらかにマッチするので "[lr]ink" というパターンで2つともマッチします。
re_meta2_1.py import re pattern = re.compile("[lr]ink") st ="link pink rink" result = pattern.findall(st) print(result)
実行結果
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 と 3 のみが一致しました。
指定した文字以外 [^ ]
[^ ] を用いて、半角カタカナを除いた文字にマッチさせてみます。
対象となる文字列は、五5ゴゴ としましょう。
この中の ゴ 以外の文字に一致するようにします。
re_meta2_3.py import re pattern = re.compile("[^ヲ-゚]") st ="五5ゴゴ" result = pattern.findall(st) print(result)
実行結果
半角カタカナは除外されています。
メタ文字が無効
[ ] 中で - ^ ] \ 以外のメタ文字なら無効になる事を確認します。
例として .+*?$|{3}() を試してみます。
re_meta2_4.py import re pattern = re.compile("[.+*?$|{3}()]") st =".+*?$|{3}()" result = pattern.findall(st) print(result)
実行結果
メタ文字の特殊効果は打ち消されています。
先頭以外の ^
^ は先頭以外で使われた場合には、補集合の効果が無くなります。
re_meta2_5.py import re pattern = re.compile("[*^]") st ="2*2 3^3" result = pattern.findall(st) print(result)
実行結果
先頭や末尾の -
- は、先頭や末尾なら範囲を表す特殊効果は無効です。
re_meta2_6.py import re pattern = re.compile("[-3]") st ="1-3" result = pattern.findall(st) print(result)
実行結果
先頭の ]
] は先頭に配置する事で無効になります。
re_meta2_7.py import re pattern = re.compile("[][]") st ="[]" result = pattern.findall(st) print(result)
実行結果
\
\ は、エスケープする必要があります。
re_meta2_8.py import re pattern = re.compile(r"[\\n]") st ="a\\nc" result = pattern.findall(st) print(result)
実行結果
\ n の文字そのものにマッチした事が確認できました。
文字クラスの解説は以上です。
少々細かいところまで立ち入りました。
一つ一つ確実におさえた事で、応用の際にも対応出来る力が身に付きました。
関連記事
[ ] 文字集合を指定する
正規表現: | 文字クラス |
難度 : | 基礎 |
事前知識: | Pythonの基礎文法(reモジュールを含む) |
学習効果: | 文字クラスを細部まで理解できる。 |
\d 数字を指定する
正規表現: | 文字クラス |
難度 : | 基礎 |
事前知識: | Pythonの基礎文法(reモジュールを含む) |
学習効果: | \d を用いて、数字を 狭義/広義 にマッチさせる事が出来るようになる。 |
\D 数字以外を指定する
正規表現: | 文字クラス |
難度 : | 入門〜基礎 |
事前知識: | Pythonの基礎文法。正規表現の文字クラス等。 |
学習効果: | \D を用いて、数字以外を 狭義/広義 にマッチさせる事が出来るようになる。 |
\w 単語構成文字
正規表現: | 文字クラス |
難度 : | 基礎 |
事前知識: | Pythonの基礎文法。正規表現の文字クラス等。 |
学習効果: | \w を用いて、単語構成文字を 狭義/広義 にマッチさせる事が出来るようになる。 |
\W 単語構成文字以外
正規表現: | 文字クラス |
難度 : | 基礎 |
事前知識: | Pythonの基礎文法。正規表現の文字クラス等。 |
学習効果: | \W を用いて、単語構成文字以外を 狭義/広義 にマッチさせる事が出来るようになる。 |
\s 空白文字を指定する
正規表現: | 文字クラス |
難度 : | 基礎 |
事前知識: | Pythonの基礎文法。正規表現の文字クラス等。 |
学習効果: | \s を用いて、空白文字を 狭義/広義 にマッチさせ、余白を適切に消す事が出来るようになる。 |
\S 空白以外を指定する
正規表現: | 文字クラス |
難度 : | 入門〜基礎 |
事前知識: | Pythonの基礎文法。正規表現の文字クラス等。 |
学習効果: | \S を用いて、空白文字以外を 狭義/広義 にマッチさせ、余白以外の文字を取得できる。 |
. 改行以外の任意の1文字
正規表現: | 文字クラス |
難度 : | 入門〜基礎 |
事前知識: | Pythonの基礎文法。エスケープ文字である \ (バックスラッシュ)等。 |
学習効果: | . を用いて、幅広いマッチが出来るようになる。 |
正規表現をPythonから使うには ?
正規表現: | Pythonから使う |
難度 : | 入門 |
事前知識: | Pythonの基礎文法 |
学習効果: | pythonから正規表現を使う一連の流れを掴む |
ハロー ! メタキャラクタ
正規表現: | メタキャラクタの概要 |
難度 : | 入門 |
事前知識: | 不要 |
学習効果: | メタキャラクタの概要を掴む |
正規表現とは?
正規表現: | 概要 |
難度 : | 入門 |
事前知識: | 不要 |
学習効果: | 正規表現の概要を知る |
PR