我想更改源字符串:
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'
>>>
答案 0 :(得分:2)
您的代码确实有效,可以合并为一个表达式:
>>> 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'
答案 1 :(得分:1)
这很有效。打印原始字符串时,' \'被替换为' \\'因此它不会将其解释为用于例如的转义字符。结束字符' \ n',标签字符' \ t'等等。
尝试命令
print str2
或print a1
没关系。
更新:即使stackoverflow也取代了' \\'与' \',所以我必须输入' \\\' (要输入这个我必须使用5个斜杠):D
答案 2 :(得分:0)
您还可以执行以下操作:
str1 = 'abc-ccd_2013'
repl = ('-', '\-'), ('_', '\_')
print reduce(lambda a1, a2: a1.replace(*a2), repl, str1)
您必须使用打印功能才能获得所需的结果。