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

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

新規登録して質問してみよう
ただいま回答率
85.35%
標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

エスケープ処理

エスケープ処理とは、一連の文字や一文字に対して、一定の規則に従って別の意味を適用する処理過程です。

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

11863閲覧

Pythonでの文字列置換でバックスラッシュを扱いたい

退会済みユーザー

退会済みユーザー

総合スコア0

標準出力

標準出力(stdout)は、プログラムが標準的に用いるデータ出力元。標準出力に書き込み要求を発行しすることにより、ディスプレイ装置にデータを表示することができます。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

エスケープ処理

エスケープ処理とは、一連の文字や一文字に対して、一定の規則に従って別の意味を適用する処理過程です。

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/07/08 19:50

編集2020/07/09 00:37

Python3系で開発しております。

文字列 \\.\hogehoge があるとします。(print()等で出力するとバックスラッシュがエスケープされて \.\hogehoge となる)

この文字列を \\.\hogehoge から \.\hogehoge となるように文字列の置換をしたいのですが、 replace() を使ってしまうとそのままでは文字列を囲う '" のエスケープをバックスラッシュがしてしまい、実現したい置換ができません。

何か良い方法がございましたら教えていただきたく存じます。

よろしくお願いいたします。

追記

ご指摘がありましたので追記いたします。

回答者が実行できるコードを貼ってください

Python

1STRING = '\\.\hogehoge' 2 3# 出力 '\\.\hogehoge' 4print(repr(STRING)) 5# 出力 '\.\hogehoge' 本当は '\.\hogehoge' にしたい 6print(repr(STRING.replace('\\', '\')))

どういうルールでですか?

上記コード内のコメントに記載しております。

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

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

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

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

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

quickquip

2020/07/08 23:55

> この文字列を \\\\.\\hogehoge から \\.\hogehoge となるように文字列の置換をしたいのですが どういうルールでですか? > そのままでは文字列を囲う ' や " のエスケープをバックスラッシュがしてしまい どういうコードを書いたのですか? 回答者が実行できるコードを貼ってください。 https://teratail.com/help/question-tips#questionTips3-5-1
退会済みユーザー

退会済みユーザー

2020/07/09 00:38

ご指摘の点、修正いたしました。 不十分であればご連絡ください。よろしくお願いいたします。
guest

回答2

0

ベストアンサー

\h というエスケープシーケンスは定義されていないので、得たい内容の方がおかしいと思われます。
https://docs.python.org/ja/3/reference/lexical_analysis.html#index-22

Pythonには

標準の C とは違い、認識されなかったエスケープシーケンスはすべて、そのまま文字列中に残ります。すなわち、バックスラッシュも結果中に残ります。

https://docs.python.org/ja/3/reference/lexical_analysis.html#index-23

という仕様も存在するので、'\h'という「認識されないエスケープシーケンス」を含む文字列リテラルは
'\h'と等しい長さ2の文字列となります。

plain

1>>> '\h' == '\h' 2True

'\.\hogehoge''\.\hogehoge'もどちらも等しい、長さ11の文字列リテラルです。

plain

1>>> '\.\hogehoge' == '\.\hogehoge' 2True 3 4 5>>> len('\.\hogehoge') 611 7 8 9>>> len('\.\hogehoge') 1011

(文字列'\.\hogehoge'の長さをどう考えていますか? と聞きたいところですが)


したがって'\.\hogehoge'という結果を得ていることでなにか不都合が生じるということは考えにくく、
'\.\hogehoge'という正しくないエスケープシーケンスを含む文字列が欲しいとする要求の方がなにかおかしいという感想になります。
'\.\hogehoge'を得たいというのは目的ではなく手段のはずです。
本当には何がしたいのか? という目的の方を質問に書くべきです。

投稿2020/07/09 01:09

編集2020/07/09 01:12
quickquip

総合スコア11235

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

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

退会済みユーザー

退会済みユーザー

2020/07/09 01:13

ありがとうございます。 よく考えると確かに、おっしゃる通りです。 また改めて質問をさせていただきます。 ありがとうございました。
guest

0

replace() を使ってしまうとそのままでは文字列を囲う '" のエスケープをバックスラッシュがしてしまい、

上記の説明がどのような現象を指しているかがわかりませんが、
次のようにすると目的の置換ができます:

python

1string = r"\\.\hogehoge" 2string = string.replace("\\", "\") 3print(string)

出力結果:

console

1$ python test.py 2\.\hogehoge

投稿2020/07/08 20:04

y_shinoda

総合スコア3272

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

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

退会済みユーザー

退会済みユーザー

2020/07/09 00:41

同様の内容を試してみましたが、やはりうまくいっていないようです。 追記しましたのでよろしければご確認ください。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問