diveintopython 7章読書メモ

例によって個人的メモなので、見落としや誤解があるかもしれません。
気がついたら直します。

始まり始まり

今回は正規表現。知っている人はreモジュールのリファレンスを見れば大体できることはわかるそうです。
4.2 re -- 正規表現操作
正規表現 HOWTO
すっとばそうと思ったけど流し読みして気がついたことを上げてみます。

バックスラッシュの扱い

ある文字列が単語の最後にある場合で表現するときには「\b」を使う。
pythonでは\はエスケープシーケンスの意味(改行の\nを表すときに\を使うことをエスケープ)があるのでそのままでは使えない。
よって、「\」自体をエスケープさせるためにバックスラッシュを1つつけて「\\b」とする。

raw文字列

上記のバックスラッシュ病を回避するためには、pythonの文字列をraw文字列として扱うと良い。
文字列は「"text!\n"」で仕切るが、「r"text!\n"」とするとraw文字列として処理される。普通の文字列は"\n"で改行されるはずだが、raw文字列は"\n"がそのまま表示される。バックスラッシュもエスケープシーケンスの意味を持たなくなる。
raw文字列ってなんだろうって思ったけど、要は、文字列を見てpythonが決めている文字列定義を外して文字(コード)そのものを扱うって意味なのかなと理解した。
3. 形式ばらない Python の紹介

#Example 7.2. 全ての単語にマッチする

 >>> s ='100 BROAD'
 >>>re.sub('ROAD$' ,'RD.', s)
'100 BRD.'
 >>>re.sub('\\bROAD$' ,'RD.', s)  1
'100 BROAD'
 >>>re.sub(r'\bROAD$' ,'RD.', s)  2
'100 BROAD'
 >>> s ='100 BROAD ROAD APT. 3'
 >>>re.sub(r'\bROAD$' ,'RD.', s)  3
'100 BROAD ROAD APT. 3'
 >>>re.sub(r'\bROAD\b' ,'RD.', s) 4
'100 BROAD RD. APT 3'

Example 7.2. 全ての単語にマッチする

その他

あとローマ数字をチェックするとか、電話番号をチェックするとか書いてある。
ある文字の個数チェックとか、いくつかの文字のいずれかのマッチとか。まとめで大体わかります。
正規表現は奥が深すぎるのか、紹介程度な感じでした。


最後に1年前の自分に贈る言葉

正規表現はかなり強力ですが、すべての問題にたいして正しい解決法とは限りません。どの場合に使用するのが適切であるか、いつ問題を解決してくれるのか、いつ問題を解決するよりも問題を引き起こしてしまうのか、を知るためにそれについて十分よく学習しておくべきです。


問題に直面したときに、次のように思う人もいます。"よし、正規表現を使おう"2つの問題を抱えています。

    • Jamie Zawinski, in comp.emacs.xemacs

なんか雑になってきたか

この先は各ライブラリの紹介やらが多そうでした。英語は今のところはがつがつ読める人でないので、ゆるりと見ていこうと。
diveintopythonはこの辺でひとまずお休みにして、いろんなソフトのコードを眺めて行きたいし、何か書きたい。
(まて、作ったもののメンテをしろよ。)