memoranda2016-02-23Pythonの正規表現でバックスラッシュを含む文字列とマッチする場合Pythonのreモジュールでsearchなどの関数に正規表現を与える場合、rubyやperlなどのように正規表現を直接与えることができず、文字列として与える必要があるため、WindowsのPath区切りにマッチさせたいときなどに正規表現内にバックスラッシュを使いたい場合、一つのバックスラッシュに対して"\\\\"とする必要がある。rプレフィックスを用いることで、文字列としてのエスケープは行われなくなるので、正規表現としての一つのバックスラッシュをr"\\"と書ける。文字列の最後にr"\"とは書けないことにも注意が必要。reモジュールのsearch関数の第1引数は正規表現、第2引数はマッチ対象となる文字列だ。match='abc\\abc\\'>以下のように正規表現の文字列として"\\"を与えてしまうと、文字列内でエスケープした結果として\が正規表現として与えられてしまいエラーとなる。\は単独では正規表現として有効ではない。range...バックスラッシュを含む文字列が変数に代入されており、それを正規表現として扱いたい場合、文字列中のバックスペースは二回エスケープされることになるので、予め"\\\\"とするか、あるいはrプレフィックスを与えてr"\\"としておく必要がある。match='abc\\abc'>以下は誤ったやり方になる。上記の通り、rプレフィックスは文字列としてのエスケープを行わない、という指示になるので、新たにrプレフィックスを付けた文字列に変数をフォーマットしても期待通りには動かない。%rでフォーマットし直してもうまくいかない。して(正規表現として使われることを意識してしない)元の変数をsearchの第1引数に与えようと、replやevalを試してみてもうまくいかない。eval(repr(a))'abc\\abc'そのため、以下のようにsub関数による置換が必要になるかもしれない。Unicodeは文字集合である。仮想マシンのスタックとネットワークI/Oについて月別アーカイブ参加グループインターネットテクノロジープログラミングはてなブログをはじめよう!nishidyさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。