kyoneco’s blog

教育、数学、統計といったテーマについて考えていきます

正規表現 第二章 先後読み入門 読書メモ

 

kyoneco.hatenablog.com

 

2.3.5 先後読みによって数値にカンマを付け加える

大きい数字の列にカンマを挿入したい ex.112345 → 112,345

右から3桁ずつ数え、左側にまだ数字が残っていればそこにカンマを入れていきたい
カンマを装入する位置 = 右側に3も倍数個の数字があり、左側に何らかの数字がある位置のこと
先後読みで解決できる
 

先後読み構文:テキスト中の「位置」にマッチする。

先読み:テキストの先の方(まだ読んでない右の方)を覗き込んで、部分正規表現がマッチするかどうかを調べ、マッチするようなら正規表現要素として成功とする。

肯定の先読み:(?=・・・)

ex. (?=\d) 次が数値になっている位置で成功する
a1a →(置換b)→ab1a
 
ex.2 行頭が数字から始まっているものの先頭に・をつけたい
(?=^\d) 置換・
11
22
・11
・22
 
 

後読み:テキストの後ろの方(もう読んだ左の方)を振り返る

後読み: (?<=・・・)
ex.(?<=\d) 左に数値がある位置(数字の後ろの位置)で成功する 
a1a →(置換b)→a1ba 
 

先後読みで重要なこと:テキストを「消費」しないこと

マッチしたテキスト自体ではなく、マッチするテキストの「位置」をみつけるだけ。
ex.
ターゲット    Jeffrey 
正規表現     (?=Jeffrey)Jeff
マッチするところ Jeff
 

開き括弧シークエンス

(?:) キャプチャなしのグループ化
(?=) 先読み
(?<=) 後読み
 

メモ

先読みと後読みについて解説している節です。テキストの位置にマッチするというのがこれまで文字などをターゲットにしていたときとは異なるところです。この場所にこれをいれたいのにと思ったときには先後読みを使えばよいのです。位置へのマッチは^,$、\bもありますがより一般的な方法を知ることのできる節です。