如何在Python中转义反斜杠和单引号或双引号?

如何在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

在字符串转义过程中,两个反斜杠保持两个反斜杠,然后通过正则表达式转义成为仅一个反斜杠,没有特殊含义。总共,正则表达式说:“匹配一个反斜杠,后跟单引号或双引号。”

回答:

现在来看piècederésistance:前面的内容确实很好地证明了jwz的含义1。如果您忘记了正则表达式(并且了解原始字符串),那么解决方案将变得更加显而易见:

>>> print s1.replace(r'\"', 'thevalue').replace(r"\'", 'thevalue')

some 'long' string thevalue and thevalue some 'escaped' strings


1有些人遇到问题时会认为“我知道,我会使用正则表达式”。现在他们有两个问题。

以上是 如何在Python中转义反斜杠和单引号或双引号? 的全部内容, 来源链接: utcz.com/qa/402147.html

回到顶部