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

时间:2016-09-08 10:05:33

标签: python console

我想更改源字符串:

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

3 个答案:

答案 0 :(得分:2)

您的代码确实有效,可以合并为一个表达式:

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

请注意printrepr的区别:

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

相当于:

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

答案 1 :(得分:1)

这很有效。打印原始字符串时,' \'被替换为' \\'因此它不会将其解释为用于例如的转义字符。结束字符' \ n',标签字符' \ t'等等。 尝试命令 print str2print a1 没关系。

更新:即使stackoverflow也取代了' \\'与' \',所以我必须输入' \\\' (要输入这个我必须使用5个斜杠):D

答案 2 :(得分:0)

您还可以执行以下操作:

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

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