我有一个字符串,我想在某些字符前添加一个\
。
我在terms_string中有我的字符串,我要做的是:
charmap = {':', '(', ')', '{', '}', '[', ']', '<', '>', '/', '\\', '='}
for key in charmap:
terms_string = terms_string.replace(key, '\\'+key)
一切正常,但我得到了\\
而不是\
。
例如我得到的charmap
{'(', ')', '/', ':', '<', '=', '>', '[', '\\', ']', '{', '}'}
插入
{'(', ')', '/', ':', '<', '=', '>', '[', '\', ']', '{', '}'}
这仅发生在字符\上,而不发生在其他字符上。
知道为什么会这样吗?可能是Python配置?谢谢!
答案 0 :(得分:1)
我不确定替换\的目标是什么,但是这些选项可能对您有用。
terms_string = "foo (bar fo/o: b\a=r)"
charmap = {':', '(', ')', '{', '}', '[', ']', '<', '>', '/', '\\', '='}
for key in charmap:
terms_string = terms_string.replace(key, "\\{}".format(key))
print(terms_string)
>>> foo \(bar fo\/o\: b\=r\)
或
import re
terms_string = "foo (bar fo/o: b\a=r)"
result = re.sub(r"([:\(\)\{\}<>/\\=])", r"\\\1", terms_string)
print(result)
>>> foo \(bar fo\/o\: b\=r\)
也考虑使用re.escape
terms_string = "foo (bar fo/o: b\a=r)"
print(re.escape(terms_string))
>>> foo\ \(bar\ fo/o:\ b=r\)
答案 1 :(得分:0)
发生这种情况是因为\是转义字符。如果给一个\,它将在其旁边查找字符以了解其含义。因此,对于文字\,它会放置一个\\,然后该\\不会转义\。转义字符是具有特殊含义的字符。例如,“ \ n”表示换行。不是文字\ n。希望这可以澄清您的疑问。这种情况不仅发生在python中,而且发生在大多数语言中。
进一步reading