我需要将转义序列放在字符串中以表示某些字符(在这里使用双引号作为示例)。例如,如果我有一个字符串abra"cada"bra
,我需要生成:abra\"cada\"bra
。但是如果字符串已经有我感兴趣的文字的转义字符(即本例中的双引号)abra\"cada\"bra
,我需要不管它。
在python中最简单的方法是什么?
(想法是将其写入由另一个实用程序读取的文本文件。)
答案 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
"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'