Python 如何将字符串更改为格式化字符串?

Python 如何将字符串更改为格式化字符串?,python,console,Python,Console,我要更改源字符串: str1 = 'abc-ccd_2013' 输入以下目标字符串: str2 = 'abc\-ccd\_2013'. 所有'-'应替换为'\-',所有'应替换为'\\' 以下方法不起作用: >>> str1 'abc-ccd_2013' >>> a1 = str1.replace("-","\\-") >>> a1 'abc\\-ccd_2013' >>>

我要更改源字符串:

str1 = 'abc-ccd_2013'
输入以下目标字符串:

str2 = 'abc\-ccd\_2013'.
所有
'-'
应替换为
'\-'
,所有
'
应替换为
'\\'

以下方法不起作用:

    >>> str1
    'abc-ccd_2013'
    >>> a1 = str1.replace("-","\\-")
    >>> a1
    'abc\\-ccd_2013'
    >>> a1 = str1.replace("-","\-")
    >>> a1
    'abc\\-ccd_2013'
    >>> a1 = str1.replace('-','\-')
    >>> a1
    'abc\\-ccd_2013'
    >>> a1 = str1.replace(r'-',r'\-')
    >>> a1
    'abc\\-ccd_2013'
    >>> 

您的代码确实有效,可以组合到单个表达式中:

>>> print("abc-ccd_2013".replace("-","\-").replace("_","\_"))
abc\-ccd\_2013
注意
print
repr
的区别:

>>> "abc-ccd_2013".replace("-","\-").replace("_","\_")
'abc\\-ccd\\_2013'
相当于:

>>> print(repr("abc-ccd_2013".replace("-","\-").replace("_","\_")))
'abc\\-ccd\\_2013'

这很有效。打印原始字符串时,“\”将替换为“\”,因此它不会将其解释为转义字符,例如,用于结束行字符“\n”、制表符“\t”等。 尝试命令
打印str2
打印a1
一切都会好起来的


更新:即使stackoverflow也将“\\”替换为“\\”,因此我必须键入“\\\”(要键入此内容,我必须使用5个斜杠):D

您还可以执行以下操作:

str1 = 'abc-ccd_2013'
repl = ('-', '\-'), ('_', '\_')
print reduce(lambda a1, a2: a1.replace(*a2), repl, str1)

您必须使用打印功能才能获得所需的结果。

发生了什么?你知道你使用了“而不是”吗?对我来说很好。试着设置
str1='abc-ccd_2013'
(即用单引号替换反勾)。@XavierC.,我已经更新了帖子,请检查。它正在工作。你只是误解了你在Python控制台中看到的结果,它向你展示了结果字符串的表示,这也是为什么它会在字符串周围显示引号。谢谢你的回答!