質問: "\\u3053\\u306e\\u4eba"`は、そこから取得した結果の冒頭部分になります。 Hidekiさん: 確かにこれで欲しかった結果が返ってきました。ありがとうございます。お時間があれば、どのような仕組みだったのか解説いただけますと、今後の勉強に役立ちます。 argusさん: こちらでも上のHidekiさんと同様の結果が得られました。ありがとうございます。こちらも、どのような仕組みだったのか、大変興味があります。
回答: まず、文字列中の連続する "\" を 一つの "\" に置換する必要があれば、正規表現だとややこしいので、`replace`メソッドをお勧めします。(raw文字を使えばましにはなりますが説明のため以下では使いません) ``` # \ は エスケープされて \\ と表現されます s = 'ab\\\\cd\\\\ef' print(s) # 出力 -> ab\\cd\\ef s2 = s.replace('\\\\', '\\') print(s2) # 出力 -> ab\cd\ef # 正規表現の場合、正規表現のエスケープもあるので "\" が倍増します s3 = re.sub("\\\\\\\\", "\\\\", s) print(s3) # 出力 -> ab\cd\ef ``` しかし、`result = "\\u3053\\u306e\\u4eba"` という形で代入されているなら、"\" は連続していません。文字列中の連続する"\"はエスケープで表現された一つの"\"だからです。 ``` print(result) # 出力 -> \u3053\u306e\u4eba ``` 上のように print すると確認出来ますが "\" は一つです。 この場合は他の方がコメントで書かれている方法で、エスケープを解釈し、変換すればよいです。 もし、resultの中身が本当に`"\\u3053\\u306e\\u4eba"`となっていて "\" が連続しているならば、上記の`replace`をした上でエスケープの解釈の処理をするのがよいでしょう。 ``` # 文字列リテラルでは一つの \ の表現が \\ ですから、 \\ の表現は \\\\ となります result = "\\\\u3053\\\\u306e\\\\u4eba" s = result.replace('\\\\', '\\') print(s) # 出力 -> \u3053\u306e\u4eba ```