2017-07-10 11 views
0

私は夢中になっている単純な問題があります。これは、Pythonの取り扱いのためです。unicode文字です。python:regexを使って普通の文字をユニコードに置き換えるre

私は(http://www.jwe.cc/downloads/table.texと非常によく似ています)私のディスク上に格納されlatexテーブルを持っている、と私はハイフン-\u2212)はエンダッシュalt 0150または\u2013)に置き換えられるように、その上にいくつかの正規表現を適用したい

私は2つの異なる正規表現と置換を実行する次の関数を使用しています。

import re 
import glob 

def mychanger(fileName): 
    with open(fileName,'r') as file: 
    str = file.read() 
    str = str.decode("utf-8") 
    str = re.sub(r"((?:^|[^{])\d+)\u2212(\d+[^}])","\\1\u2013\\2", str).encode("utf-8") 
    str = re.sub(r"(^|[^0-9])\u2212(\d+)","\\1\u2013\\2", str).encode("utf-8") 
    with open(fileName,'wb') as file: 
    file.write(str) 

myfile = glob.glob("C://*.tex") 
for file in myfile: mychanger(file) 

残念ながら、これは何も変わりません。

\u2013の代わりに$のようなユニコード以外の文字を使用すると、動作しますが、これは正規表現コードが正しいことを意味します。

私はここで迷っていますが、re.sub(ur"((?:^|[^{])\d+)\u2212(\d+[^}])","\\1\u2013\\2", str).encode("utf-8")を使ってみましたが、それでも何も変わりません。

ここで何が間違っていますか?ありがとう!

+1

てみてくださいを参照してください。 'uは "\\ 1 \ u2013 \\ 2"'cᴏʟᴅsᴘᴇᴇᴅ感謝@ –

+0

は私がcᴏʟᴅsᴘᴇᴇᴅ@できるだけ早く –

+0

を試してみましょう'TypeError:Unicodeに強制する:必要な文字列またはバッファ、リストが見つかりました' –

答えて

1

サンプルファイルには実際にはU + 2212ではなくHYPHEN-MINUS(U + 002D)が含まれています。

それが右の文字が含まれていた場合でも、あなたは、Python 2.xのユニコードのすべてN00B問題当たっている場合:

  1. デコードやエンコードをインライン。実際には2回エンコードします。私のアドバイスは、すべてのデコードやエンコードを削除して、Pythonはあなたのためにそれを行うことを可能にすることであるr生修飾子

のユニコード

  • リテラル(\u2212)でないUnicode文字列での不必要な使用の
  • 使用。 ioモジュールは、Python 3.xの動作をバックポートし、ファイルをデコードします。また、strmy_strに変更し、Python独自のstrクラスとの競合を回避しました。

    のPython 2.xとユニコードの完全な説明については
    import re 
    import glob 
    import io 
    
    def mychanger(fileName): 
        with io.open(fileName,'r', encoding="utf-8") as file: 
         my_str = file.read() 
    
         my_str = re.sub(u"((?:^|[^{])\d+)\u002d(\d+[^}])", u"\\1\u2013\\2", my_str) 
         my_str = re.sub(u"(^|[^0-9])\u002d(\d+)",   u"\\1\u2013\\2", my_str) 
    
        with io.open(fileName, 'w', encoding="utf-8") as file: 
         file.write(my_str) 
    
    myfile = glob.glob(C://*.tex") 
    
    for file in myfile: mychanger(file) 
    

    How to fix: "UnicodeDecodeError: 'ascii' codec can't decode byte"

  • +0

    ありがとう!私はnoobieの問題をヒットしました:D –

    +2

    Python 2では、コードをコピーして貼り付けるときに避けられないことがあります:)ああ、名前が合っていれば;) –

    関連する問題