42

だから私はこれを理解できないようです...私は文字列を言っており、"a\\nb"これを"a\nb". 次のすべてを試しましたが、どれも機能していないようです。

>>> a
'a\\nb'
>>> a.replace("\\","\")
  File "<stdin>", line 1
    a.replace("\\","\")
                      ^
SyntaxError: EOL while scanning string literal
>>> a.replace("\\",r"\")
  File "<stdin>", line 1
    a.replace("\\",r"\")
                       ^
SyntaxError: EOL while scanning string literal
>>> a.replace("\\",r"\\")
'a\\\\nb'
>>> a.replace("\\","\\")
'a\\nb'

これはうまく機能するため、最後のものが機能する理由が本当にわかりません。

>>> a.replace("\\","%")
'a%nb'

私がここに欠けているものはありますか?

編集\ はエスケープ文字であることを理解しています。ここで私がやろうとしているのは、すべての\\n \\tetc. を etc. に変換\n \tすることです。replace は、私が想像していたようには機能していないようです。

>>> a = "a\\nb"
>>> b = "a\nb"
>>> print a
a\nb
>>> print b
a
b
>>> a.replace("\\","\\")
'a\\nb'
>>> a.replace("\\\\","\\")
'a\\nb'

文字列 a を文字列 b のように見せたい。しかし、私が思っていたように、置換はスラッシュを置換していません。

4

8 に答える 8

55

これには replace を使用する必要はありません。

あなたが持っているのは(string_escapeエンコーディングを使用して)エンコードされた文字列であり、それをデコードしたい:

>>> s = r"Escaped\nNewline"
>>> print s
Escaped\nNewline
>>> s.decode('string_escape')
'Escaped\nNewline'
>>> print s.decode('string_escape')
Escaped
Newline
>>> "a\\nb".decode('string_escape')
'a\nb'

Python 3 では:

>>> import codecs
>>> codecs.decode('\\n\\x21', 'unicode_escape')
'\n!'
于 2011-03-03T21:56:54.390 に答える
11

\ がエスケープ文字であることを見逃しています。

ここを見てください: http://docs.python.org/reference/lexical_analysis.html at 2.4.1 "Escape Sequence"

最も重要なのは、\n が改行文字であることです。\\ はエスケープされたエスケープ文字です:D

>>> a = 'a\\\\nb'
>>> a
'a\\\\nb'
>>> print a
a\\nb
>>> a.replace('\\\\', '\\')
'a\\nb'
>>> print a.replace('\\\\', '\\')
a\nb
于 2011-03-03T21:38:10.987 に答える
4

元の文字列にa = 'a\\nb'は実際には 2 つの'\'文字がありません。最初の文字は後者のエスケープです。すると、実際には 1 人のキャラクターprint aしかいないことがわかります。'\'

>>> a = 'a\\nb'
>>> print a
a\nb

'\n'ただし、スラッシュをエスケープせずに、を改行文字として解釈することを意味する場合は、次のようになります。

>>> b = a.replace('\\n', '\n')
>>> b
'a\nb'
>>> print b
a
b
于 2011-03-03T21:47:40.147 に答える
3
r'a\\nb'.replace('\\\\', '\\')

また

'a\nb'.replace('\n', '\\n')
于 2011-03-03T21:44:00.603 に答える
1

Python 文字列リテラルでは、バックスラッシュはエスケープ文字です。これは、インタラクティブ プロンプトが文字列の値を表示する場合にも当てはまります。文字列のリテラル コード表現が得られます。このステートメントを使用しprintて、文字列が実際にどのように見えるかを確認します。

次の例は、違いを示しています。

>>> '\\'
'\\'
>>> print '\\'
\
于 2011-03-03T21:43:57.197 に答える
1

これは、「生の」文字列 (=r開始引用符の前にある文字列) であっても、エスケープされていないエスケープ文字を文字列の最後の文字にすることはできないためです。これは代わりに機能するはずです:

'\\ '[0]
于 2011-03-03T21:39:03.523 に答える
0
path = "C:\\Users\\Programming\\Downloads"
# Replace \\ with a \ along with any random key multiple times
path.replace('\\', '\pppyyyttthhhooonnn')
# Now replace pppyyyttthhhooonnn with a blank string
path.replace("pppyyyttthhhooonnn", "")

print(path)

#Output... C:\Users\Programming\Downloads

于 2020-09-05T20:30:36.030 に答える