Python用反斜杠替换

时间:2019-05-17 07:00:32

标签: python regex replace

我有一个字符串,我想在某些字符前添加一个\

我在terms_string中有我的字符串,我要做的是:

charmap = {':', '(', ')', '{', '}', '[', ']', '<', '>', '/', '\\', '='}
for key in charmap:
    terms_string = terms_string.replace(key, '\\'+key)

一切正常,但我得到了\\而不是\

例如我得到的charmap

{'(', ')', '/', ':', '<', '=', '>', '[', '\\', ']', '{', '}'}

插入

{'(', ')', '/', ':', '<', '=', '>', '[', '\', ']', '{', '}'}

这仅发生在字符\上,而不发生在其他字符上。

知道为什么会这样吗?可能是Python配置?谢谢!

2 个答案:

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