如何在python中注入转义序列

时间:2013-03-08 16:07:49

标签: python

我需要将转义序列放在字符串中以表示某些字符(在这里使用双引号作为示例)。例如,如果我有一个字符串abra"cada"bra,我需要生成:abra\"cada\"bra。但是如果字符串已经有我感兴趣的文字的转义字符(即本例中的双引号)abra\"cada\"bra,我需要不管它。 在python中最简单的方法是什么?

(想法是将其写入由另一个实用程序读取的文本文件。)

5 个答案:

答案 0 :(得分:2)

首先解码字符串可能最简单,这样就不会转义任何内容,然后重新转义生成的字符串。

答案 1 :(得分:1)

你可以使用正则表达式中的断言背后的相应负面看法来获得它:

import re

PAT = re.compile(r'(?<!\\)"')
txt1 = '"abra"cada"bra'
txt2 = '\\"abra\\"cada\\"bra'
print PAT.sub(r'\\"', txt1)
print PAT.sub(r'\\"', txt2)

如果引号是sting的第一个字符,这将确保它甚至正常工作,如上例所示。

答案 2 :(得分: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\"

答案 3 :(得分:1)

假设\除了某些字符之前没有特殊含义(例如,'"'),那么@chepner's suggestion首先将unescape实现为:

def escape(text, char='"', escape="\\"):
    escaped_char = escape + char
    text = text.replace(escaped_char, char) # unescape
    return text.replace(char, escaped_char) # escape

Input

"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\"

答案 4 :(得分:0)

正则表达式会这样做。这个用来匹配“如果它没有反斜杠前面的字符。我在字符串的前面使用'r'来告诉python不要特别对待'\'字符,我不得不把它放两次到告诉正则表达式解析器不要特别使用它。尝试帮助(重新)为什么(?

import re
re.sub(r'(?<!\\)"', r'\"', 'abra"cada\\"bra')
# Returns 'abra\\"cada\\"bra'