Python文字列(およびさまざまなエンコーディングのPythonでのバックスラッシュ認識)でバックスラッシュをエスケープし、正規表現でバックスラッシュを使用しても問題を解決できないという問題については、 。私は非常に任意のヘルプ(リンク、コードの例など)をいただければ幸いです。Python:特定のUnicodeエンティティを辞書からのエンティティに置き換える
を使用して、文字列の16進コードを辞書の特定の要素に置き換えようとしています。コードはタイプ'\ uhhhh'であり、hhhhは16進数です。
私はsqlite3テーブルから文字列を選択します。デフォルトでは、ユニコードとして読み込まれ、「生の」ユニコード文字列として読み込まれるわけではありません。
import re
pattern_xml = re.compile(r"""
(.*?)
([\\]u[0-9a-fA-F]{4})
(.*?)
""", re.VERBOSE | re.IGNORECASE | re.DOTALL)
uni_code=['201C','201D']
decoded=['"','"']
def repl_xml(m):
item=m.group(2)
try: decodeditem=decoded[uni_code.index(item.lstrip('\u').upper())]
except: decodeditem=item
return m.group(1) + "".join(decodeditem) + m.group(3)
#input
text = u'Try \u201cquotated text should be here\u201d try'
#text after replacement
decoded_text=pattern_xml.subn(repl_xml,text)[0]
#desired outcome
desired_text=u'Try "quotated text should be here" try'
したがって、_decoded_text_を_desired_text_と等しくします。
私は、単一のバックスラッシュを二重バックスラッシュに置き換えたり、テキストを生のUnicode文字列として扱うようにPythonを強制することはできませんでした(バックスラッシュは文字通り扱われ、エスケープ文字とは異なります)。私はre.escape(テキスト)を使ってre.UNICODEを設定しようとしましたが、私の場合は助けになりません。
私はPython 2.7.2を使用しています。
この問題の解決方法はありますか。
編集:行うには何かが
text.encode('unicode_escape')
あります:私は実際に入力に次のエンコーディングを適用することによって、StandardEncodingsとPythonUnicodeIntegrationにこの問題に対する可能な解決策を見出した
?
[\\] U [0-9A-FA-F] {4} = [\\] U [0-9A-FA-F] { 0,4} – FailedDev
申し訳ありませんが、カンマはそこにあるべきではありません:[\\] u [0-9a-fA-F] {4} – npobedina
入力文字列でエラーを再現する最小限のコードと希望の出力? – FailedDev