如何在 Python 中注入转义序列

4 投票
5 回答
560 浏览
提问于 2025-04-17 18:26

我需要在一个字符串里为某些字符添加转义序列(这里用双引号作为例子)。比如说,如果我有一个字符串 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

最简单的方法可能就是先把这个字符串解码,这样就不会有任何被转义的字符,然后再把得到的字符串重新转义。

撰写回答