はじめに
正規表現を使っていていつもググっていることが多いのでこの辺で自分なりにまとめてみようと思いました。決して、就活の現実逃避などではありません。
あと、これを読んでも具体的な
正規表現の方法は分かりません。
し何も想像してません。むしろ見ない方がいいです。ただの事前知識です。
使用方法に関しては検索しなくても
/usr/lib/python3.4/re.py
の中に詳しく書いてあるのですが見ても”?”の人は僕の知見を屍にしてほしい・・・。
ちなみにそもそも私レベルのやりたいことと貴方のようにレベルの高い人にとってやりたいことのレベルに違いがあるかもしれないし網羅的ではないので注意。
はじめる前に
何となくはじめても結局、パターンについて調べる結果になるので
パターンについて簡単に記述しておきます。
perlとかやったことある人は大体同じなので読み進めてもらって構いませんし何となく知りたいという方も何となく掛けるのでここは飛ばしてもラッテも構いません。
正規表現要素の作り方
.
(ドット)改行以外の任意の文字列にマッチします。
^
(キャレット)文字列の先頭とマッチします。
$
文字列の末尾、文字列の末尾の改行の直前にマッチします。
*
みんなが大好きな*(アスタリスク)
直前の正規表現要素を0回以上の、可能な限り回数のくりかえしの正規表現。
+
直前の正規表現要素の1回以上の繰り返し表現となります。
?
直前にある正規表現要素を0回か1回繰り替えした表現です。
*?,+?,??
最小一致のマッチになり、できるだけ少ない文字数のマッチになる。
{m}
直前にある正規表現要素のm回の正確なコピーとマッチすべきであることを指定します。
{m,n}
直前にある正規表現要素をm回からn回まで繰り替えしたものを指定します。
\
特殊文字列をエスケープしたりします。
[]
文字の集合を指定するように使用します。
|
"A|B"は正規表現AもしくはBのどちらかとマッチする正規表現を作成する。
\number
同じ番号のグループの中身とマッチします。
\A
文字列の先頭だけにマッチする。
\b
空文字列とマッチする。
検索方法について
match(pattern,string)
文字列の先頭で正規表現とマッチするか判断します。
search(pattrng,string)
文字列を操作して、正規表現がどこにマッチするか調べます。
findall(pattern,string)
正規表現にマッチする部分文字列を全て探しだしリストとして返します。
finditer(pattern,string)
正規表現にマッチする部分文字列を全て探しだし iterator として返します。
実際に使ってあるのを応用するのが楽なので色々、やってみながら簡単な説明をしていきます。
match() と search() はマッチが見つからなければ None を返します。
置換など
split(pattern, string)
正規表現にマッチする部分があるたびに分割します。
sub(pattern, repl, string)
正規表現にマッチする部分をreplにある文字に置き換えます
情報を取り出す
group()
正規表現にマッチした文字列を返す。
start()
マッチの開始位置を返す。
end()
マッチの終了位置を返す。
span()
マッチの位置 (start, end) を含むタプルを返す。
はい、やっと事前知識は終わりました。
(疲れたけど今日中に書き上げたいけどもうOff無理。)
この後は実践編に任せます。
URLが乗る予定
環境
Python 3.4.3
Ubuntu 14.04.3 LTS
ipython3 1.2.1
参照したサイト
6.2. re — 正規表現操作 — Python 3.5.1 ドキュメント
その後のブログ