質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

2回答

3651閲覧

Pythonのreモジュールで長音が扱えない?

lemonade

総合スコア10

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2015/05/17 10:49

lang

1# coding: utf-8 2 3import re 4 5print re.search('ー' , 'チャーハン')

上記コードを実行すると下記のエラーがでます。

Traceback (most recent call last):
File "sample.py", line 5, in <module>
print re.search('ー' , 'チャーハン')
File "C:\Python27\lib\re.py", line 146, in search
return _compile(pattern, flags).search(string)
File "C:\Python27\lib\re.py", line 251, in _compile
raise error, v # invalid expression
sre_constants.error: unexpected end of regular expression

re.searchの第一引数が
'チ'でも'ャ'でも'ハ'でも'ン'でも問題なく処理されるのですが、
'ー'の場合だけ、なぜかエラーがでてしまいます。

しかし、同じ'ー'でもreモジュールを使わず、
printで標準出力する場合はエラーも出ず、文字化けもせず、
正常に表示されます。

lang

1# coding: utf-8 2 3print 'ー'

なぜ、'ー'の文字だけがreモジュールで
扱うことができないのでしょうか?

自分なりにwebで検索して調べてみたものの、
原因も解決策も見つかりませんでした。

原因および解決策をご存じであれば教えていただきたいです。
よろしくお願いいたします。

なお、当方の環境は、
OSがWindows7 SP1、
Pythonのバージョンは2.7.9です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ファイルの文字エンコーディングが Shift_JIS になっていませんか?

下記のコードを Windows のコマンドプロンプトで正しく実行すると、むしろ化けてしまうはずです。化けないということは utf-8 で記述されていないと推測されます。

lang

1# coding: utf-8 2print 'ー'

投稿2015/05/17 11:15

ngyuki

総合スコア4514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lemonade

2015/05/17 11:38

まさにその通りでした。 スクリプトが書かれたファイルをutf-8で保存しなおして実行してみたところ、 うまくいきました。 本当に助かりました。ありがとうございました。
guest

0

お邪魔します。

lang

1m = re.search(u'ー' , u'チャーハン) 2if m: 3 print m.group(0) 4else: 5 "No match."

としたら動作しましたよ。
内部文字コードが環境によって違うのではっきりしたことはわかりませんが、正規表現モジュールが正規表現をコンパイルするときに、メタ文字と一部誤認するような文字コードが含まれているとか、そういうことではないですかね。
変数で文字列を受ける場合も、unicode(str)などを使ってユニコード化してからモジュールに渡してやるのがよいですよ。

以上、参考まで。

投稿2015/05/17 11:01

ShinpeiYamamoto

総合スコア540

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lemonade

2015/05/17 11:12

この度はご回答いただきまして、ありがとうございます。 早速、当方の環境で書いていただいたコードを実行してみたところ、 当方の環境では下記のエラーが出てしまい動作しませんでした。 File "sample.py", line 4 m = re.search(u'・ス[' , u'・ス`・ス・ス・ス[・スn・ス・ス) ^ SyntaxError: EOL while scanning string literal
lemonade

2015/05/17 11:24

すみません。先ほど書いていただいたコードをよく確認してみたところ、 「チャーハン」を囲うクォートが片方抜けているようですね。 そのまま実行してしまいました。 その部分を早速修正して再度試してみたのですが、 今度は、下記のエラーがでて当方の環境ではうまく動作しませんでした。。 File "sample.py", line 5 m = re.search(u'ー' , u'チャーハン') SyntaxError: (unicode error) 'utf8' codec can't decode byte 0x81 in position 0: invalid start byte
ShinpeiYamamoto

2015/05/17 11:29

クオートの件、大変失礼しました。www 当方の環境では動作していますので、他の回答者さんがおっしゃっているように、ファイルのエンコーディングが誤っている可能性が高そうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問