如何在 Python 中转义反斜杠和单引号或双引号?
例如:
Long string = '''some 'long' string \' and \" some 'escaped' strings'''
value_to_change = re.compile(A EXPRESION TO REPRESENT \' and \")
modified = re.sub(value_to_change, 'thevalue', Long_string)
## Desired Output
modified = '''some 'long' string thevalue and thevalue some 'escaped' strings'''
你是怎么做到的
如果您的“长字符串”是从文件中读取的(正如您在评论中提到的那样),那么您的问题具有误导性。由于您显然不完全了解转义的工作原理,因此您写下的问题可能与您实际遇到的问题不同。
如果这些是您文件的内容(如图所示 51 个字节 + 可能是一两个行尾字符):
some 'long' string \' and \" some 'escaped' strings
那么这就是它在 python 中的样子:
>>> s1 = open('data.txt', 'r').read().strip()
>>> s1
'some \'long\' string \\\' and \\" some \'escaped\' strings'
>>> print s1
some 'long' string \' and \" some 'escaped' strings
你在问题中所写的内容将产生:
>>> s2 = '''some 'long' string \' and \" some 'escaped' strings'''
>>> s2
'some \'long\' string \' and " some \'escaped\' strings'
>>> print s2
some 'long' string ' and " some 'escaped' strings
>>> len(s)
49
你看出区别了吗?
s2 中没有反斜杠,因为当您使用它们在 Python 中写下字符串时,它们具有特殊的含义。当您从文件中读取它们时,它们没有特殊意义。
如果你想写下一个后面有反斜杠的字符串,你必须保护你输入的反斜杠。你必须防止 Python 认为它有特殊的含义。您可以通过使用反斜杠转义它来做到这一点。
执行此操作的一种方法是使用反斜杠,但通常更简单且不易混淆的方法是使用原始字符串:
>>> s3 = r'''some 'long' string \' and \" some 'escaped' strings'''
'some \'long\' string \\\' and \\" some \'escaped\' strings'
>>> print s3
some 'long' string \' and \" some 'escaped' strings
>>> s1 == s3
True
你的意思是什么
以上内容只是为了表明您的问题令人困惑。
实际答案有点难 - 当您使用正则表达式时,反斜杠具有另一层特殊含义。如果您想通过字符串转义和正则表达式转义为实际的正则表达式来安全地获得反斜杠,则必须相应地记下多个反斜杠。
此外,在单引号原始字符串 (r''
) 中放置单引号 ('
) 的规则也有点棘手,因此我将使用带有三重单引号的原始字符串 (r''''''
)。
>>> print re.sub(r'''\\['"]''', 'thevalue', s1)
some 'long' string thevalue and thevalue some 'escaped' strings
两个反斜杠在整个字符串转义过程中保持两个反斜杠,然后通过正则表达式转义变成一个没有特殊意义的反斜杠。总的来说,正则表达式说:
“匹配一个反斜杠后跟单引号或双引号。”
应该怎么做
现在是最重要的部分:前一个很好地展示了 jwz 的含义1。如果您忘记正则表达式(并了解原始字符串),解决方案将变得更加明显:
>>> print s1.replace(r'\"', 'thevalue').replace(r"\'", 'thevalue')
some 'long' string thevalue and thevalue some 'escaped' strings
1 有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。