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 \\t等变成\n \t等,并且替换似乎并没有像我想象的那样工作。

>>> 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

没有必要为此使用替换。

您拥有的是一个编码字符串(使用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 2.4.1“转义序列”

最重要的是 \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'实际上没有两个'\'字符,第一个字符是后者的转义符。如果你这样做,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

这是因为,即使在“原始”字符串(=r在起始引号之前带有一个的字符串)中,未转义的转义字符也不能是字符串中的最后一个字符。这应该起作用:

'\\ '[0]
于 2011-03-03T21:39:03.523 回答
1

在 Python 字符串文字中,反斜杠是转义字符。当交互式提示向您显示字符串的值时也是如此。它将为您提供字符串的文字代码表示。使用该print语句查看字符串的实际外观。

此示例显示了差异:

>>> '\\'
'\\'
>>> print '\\'
\
于 2011-03-03T21:43:57.197 回答
1

在 Python 3 中,它将是:

bytes(s, 'utf-8').decode("unicode_escape")
于 2021-06-17T07:54:55.433 回答
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 回答