変数はraw stringが使えない(涙)

7月 22nd, 2017

正規表現で「?」にマッチさせようとして躓いた。

普通、改行の「\n」のように「\」を前につければ行けるはず。でも、「\?」では上手く行かない。

結論から言えば、これは「\\?」にすると動く。pythonのための「\」と正規表現のための「\」の両方がいるらしい。

これを避ける方法として、raw stringなるものがあるのだそう。

m=re.compile(‘\\?’)
とするところを
m=re.compile(r’\?’)

この程度なら、大差は無いが、もっとややこしい指定の時、頭に「r」をつけておくと「\」をたくさん書かなくて良くなる。もちろん、見やすくなる。

ただ、私の場合、パターンは、予め変数に入っている。ファイルから読み込んで予めまとめてコンパイルしておく方式なので、直に書けない。

こんな感じ。
pat=’\?’
m=re.compile(pat)

これ、一体どうやって頭に「r」をつければいいんだ???pat=’r'+’\?’とかもやってみたけど駄目だった。

調べて見たら、変数にはraw stringは使えないらしい。そ、そーか・・・reptを使うのだそう。repr(pat)で、patの中身がraw stringになる。

例えば、str=’test\n’の場合、そのままprintすると「test」と表示され、改行される。

だが、print (repr(str))にすると、「\n」は、書いてあるそのままのものとして、「test\n」が表示される。

残念ながら、正規表現のパターンには使えなかった。良く分からないが、上手く反応しない…まあいいや。「\」を少し余分に書くだけだ。うん。

関連記事

  1. 他のクラスからインスタンス変数って使えるんだね
  2. 同じclass内にあるメソッドを呼び出してみる
  3. classの中身は即実行されるらしい
  4. pythonで音を鳴らす
  5. クラス内で関数(メソッド)にlistを投げると怪しきことに?
  6. ファイルの読み込みをちょこっと実験
  7. pygameでmp3を再生
  8. 前進までもう少し

Comments are closed.