人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

pythonで『――』を正規表現で操作するにはどのようにすればいいのでしょうか。

# -*- coding: cp932 *-
import re
str = "――テスト"
p = re.sub( "――", "test", str )
print p

上記のコードを実行すると、以下のようなエラーが発生します。

p = re.sub( "――", "test", str )
File "/usr/lib/python2.5/re.py", line 142, in sub
return _compile(pattern, 0).sub(repl, string, count)
File "/usr/lib/python2.5/re.py", line 233, in _compile
raise error, v # invalid expression
sre_constants.error: bogus escape (end of line)

●質問者: takets
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Expression LIB print Python REPL
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ●
●100ポイント ベストアンサー

通常の文字列では、マルチバイト文字を文字として正しく扱えません。Unicodeにしてみてください。

# -*- coding: cp932 *-
import re
str = u"――テスト"
p = re.sub(u"――", "test", str)
print p

少し説明いたします。

# -*- coding: cp932 *-
import re
str = "――"
for i in str:
 print ord(i),

上記のようにすると、以下の内容が出力されます。

129 92 129 92

日本語では2文字ですが、ASCIIでは4文字として扱われます。この中の特に2、4バイト目が要注意で、10進数の92はバックスラッシュになります。バックスラッシュで正規表現が終わっているため、エラーになっています。

Pythonで正規表現を使う場合のバックスラッシュの扱いはとても難しいのでご注意ください。(私も正確には理解できていません…orz)

[参考URL]

◎質問者からの返答

ありがとうございます。

完璧です。

今までpythonの日本語問題をなぁなぁに扱っていたのですが、勉強しなおさないといけないようです。

ordで文字コードを取得するというのは気がつきませんでした。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ