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)

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2008/02/05 23:18:30
  • 終了:2008/02/06 13:24:22

ベストアンサー

id:bonlife No.1

回答回数421ベストアンサー獲得回数752008/02/06 11:12:47

ポイント100pt

通常の文字列では、マルチバイト文字を文字として正しく扱えません。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]

id:takets

ありがとうございます。

完璧です。

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

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

2008/02/06 13:23:52

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません