如何在 Python 中注入转义序列
我需要在一个字符串里为某些字符添加转义序列(这里用双引号作为例子)。比如说,如果我有一个字符串 abra"cada"bra
,我需要把它变成这样:abra\"cada\"bra
。但是如果这个字符串已经有了我想要的转义字符(也就是双引号的情况 abra\"cada\"bra
),那我就不需要做任何改变。
在Python中,最简单的方法是什么呢?
(这个想法是把它写入一个文本文件,然后被其他工具读取。)
5 个回答
1
像这样
def esc_string(mystring, delim, esc_char='\\'):
return (esc_char+delim).join([s[:-1] if s.endswith(esc_char) else s for s in mystring.split(delim)])
然后
print esc_string('abra"cada"bra', '"')
abra\"cada\"bra
print esc_string('abra\\"cada\\"bra', '"')
abra\"cada\"bra
print esc_string('"boundary test"', '"')
\"boundary test\"
print esc_string('\\"boundary test\\"', '"')
\"boundary test\"
1
假设 \
这个符号除了在某些字符前面(比如 '"'
)有特殊含义之外,没有其他特别的意思,那么 @chepner 的建议 是先去掉转义符,可以这样实现:
def escape(text, char='"', escape="\\"):
escaped_char = escape + char
text = text.replace(escaped_char, char) # unescape
return text.replace(char, escaped_char) # escape
输入
"abra"cada"bra\"
\"abra\"cada\"bra"
"abra\"cada"bra\"
abra\"cada\\"bra\"
abra\"cada\\\"bra\"
输出
\"abra\"cada\"bra\"
\"abra\"cada\"bra\"
\"abra\"cada\"bra\"
abra\"cada\\"bra\"
abra\"cada\\\"bra\"
2
最简单的方法可能就是先把这个字符串解码,这样就不会有任何被转义的字符,然后再把得到的字符串重新转义。