正規表現基礎
^ 行の先頭
カテゴリー:アサーション①
位置にマッチ
さて今回は、文字そのものではなく、位置にマッチする正規表現をみていきます。
これらの正規表現は、言明(アサーション) または、ゼロ幅アサーション、ゼロ幅マッチ などと呼ばれています。
この中でも、先頭の位置を表す正規表現が ^ です。
先頭といった場合、文章の先頭のみを指すのか、あるいは各改行の直後も先頭とみなすのかは、フラグに依存します。
この事も含めて、実際に試してみましょう。
この記事の難度は、入門〜基礎 Bクラスです。
(A: やさしい → E: 難しい)
事前知識として、pythonから正規表現を扱う方法が必要になります。
難度 : | |
事前知識: | Pythonの基礎文法(reモジュールを含む)。 |
学習効果: | ^ を用いて、先頭の文字(改行直後も含む)にマッチさせる事が出来るようになる。 |
Contens | 目次
Chapter1 | Pythonで実行 |
Chapter1 Pythonで実行
フラグなし
フラグの話に入る前に、一旦 ^ の使い方を説明します。
まずは試しに ^ のみで実行してみます。
re_meta10_1.py import re pattern = re.compile("^") st ="mathematics" result = pattern.search(st) print(result)
実行結果
確かに先頭の位置にはマッチしているようです。
しかし、これでは文字自体に何も一致していないので、先頭文字の m も含めてパターンを構成する必要があります。
なお、search() の代わりに、複数回のマッチにも対応出来る finditer() をここから使います。
(finditer() については【パターンを探すメゾットを知る】のページで詳しく説明しています。)
re_meta10_2.py import re pattern = re.compile("^m") st ="mathematics" result_iter = pattern.finditer(st) for result in result_iter: print(result.group()) print(result.span())
実行結果
対象文字列の中で2つある m の内、先頭の m のみに一致しました。
今度は、改行文字も含めて検証してみます。
改行直後の m も ^m にマッチするかどうかです。
re_meta10_3.py import re pattern = re.compile("^m") st ="mathe\nmatics" print(st) result_iter = pattern.finditer(st) for result in result_iter: print("-------- match ↓ ---------") print(result.group()) print(result.span())
実行結果
改行直後の m は、先頭とは判断されませんでした。
先頭に含むには、フラグが必要になります。
MULTILINEフラグ
MULTILINEフラグ(あるいは Mフラグ)を指定すると、^ は文字列の先頭、および各行の先頭 (各改行の直後)でマッチするようになります。
re_meta10_4.py import re pattern = re.compile("^m",flags=re.MULTILINE) st ="mathe\nmatics" print(st) result_iter = pattern.finditer(st) for result in result_iter: print("-------- match ↓ ---------") print(result.group()) print(result.span())
実行結果
改行直後の m にもマッチしました。
この他に、インラインフラグを用いても同様の結果を得られます。
インラインフラグ
文字列パターンの先頭に (?m) を記述します。
re_meta10_5.py import re pattern = re.compile("(?m)^m") st ="mathe\nmatics" print(st) result_iter = pattern.finditer(st) for result in result_iter: print("-------- match ↓ ---------") print(result.group()) print(result.span())
実行結果
meta10_4.pyと等しい結果です。
以上で ^ についての解説は終了です。
^ を用いて、先頭の文字(改行直後も含む)にマッチさせる事が出来るようになりました。
次回は、^ とよく似た \A について触れていきます。
関連記事
^ 行の先頭
正規表現: | アサーション① |
難度 : | 入門〜基礎 |
事前知識: | Pythonの基礎文法(reモジュールを含む) |
学習効果: | ^ を用いて、先頭の文字(改行直後も含む)にマッチさせる事が出来るようになる。 |
\A 文字列の先頭
正規表現: | アサーション① |
難度 : | 入門〜基礎 |
事前知識: | Pythonの基礎文法(reモジュールを含む) |
学習効果: | ^ との違いを理解出来るようになる。 |
$ 文字列の末尾
正規表現: | アサーション① |
難度 : | 基礎 |
事前知識: | Pythonの基礎文法(reモジュールを含む) |
学習効果: | 文字列の末尾に対する、$ による操作方法の習得。( $ の改行に対する動作も含む) |
\Z 文字列の末尾
正規表現: | アサーション① |
難度 : | 入門〜基礎 |
事前知識: | Pythonの基礎文法(reモジュールを含む) |
学習効果: | 末尾に対するマッチ。及び、$ との違いを会得出来る。 |
正規表現をPythonから使うには ?
正規表現: | Pythonから使う |
難度 : | 入門 |
事前知識: | Pythonの基礎文法 |
学習効果: | pythonから正規表現を使う一連の流れを掴む |
ハロー ! メタキャラクタ
正規表現: | メタキャラクタの概要 |
難度 : | 入門 |
事前知識: | 不要 |
学習効果: | メタキャラクタの概要を掴む |
正規表現とは?
正規表現: | 概要 |
難度 : | 入門 |
事前知識: | 不要 |
学習効果: | 正規表現の概要を知る |
PR