如何在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有些人遇到问题时会认为“我知道,我会使用正则表达式”。现在他们有两个问题。
问题内容: 为了匹配文字上的反斜杠,许多人和PHP手册都说:总是这样对它进行三倍转义 注意事项 : 单引号和双引号的PHP字符串具有反斜杠的特殊含义。因此,如果\必须与正则表达式匹配,则必须在PHP代码中使用或。 这是一个示例字符串: 结论 : 如果模式是单引号,则必须将双反斜杠转义以匹配文字\ 如果模式被双引号引起,则取决于反冲是否在字符类内部,在该字符级中必须至少将其两次转义,而必须将 其三倍
问题内容: 这让我发疯了,所以请您帮忙… 我有一个Java字符串,我想用单引号替换所有反斜杠双引号序列,即使我逃避了我认为必要的替换命令,该命令也不会对字符串产生任何影响。 感谢任何建议。 谢谢。 问题答案: 在Java中,字符串是不可变的。您对字符串执行的任何操作都会产生新的对象。操作后,您需要重新分配值。以下内容可能会对您有所帮助。
问题内容: 我有一个正在编写的脚本,用于将某些字段移至新的数据库,例如 但是如您所见,由于单引号和双引号,查询每次都会中断,是否有解决此问题的方法,例如herdok或类似的东西 问题答案: 为此而制作的。 PHP:mysql_real_escape_string
我正在使用opencsv读取csv文件。有时csv文件中包含单引号或双引号。如何读取它们而不更改csv文件本身中的数据。 现在,如果我用两个单引号替换一个单引号,它工作正常,与双引号相同,用两个替换单个引号,它的工作原理。但我不想碰源文件。 要访问的代码如下: 这样做的结果是跳过下一行(也包含双引号),插入所有奇数行,跳过偶数行 提前谢谢
问题内容: 我试图将字符串传递给json对象,并且它可以工作。但是json中有一些反斜杠和双引号!如何删除它们? 我正在使用c#。这是我的代码。 当我在控制器中返回此函数时,我得到的结果是这样的 “ {\”状态\“:\”成功\“}” 问题答案: 发生这种情况是因为您正在手动(以代码形式)将数据序列化为JSON,并且当您从控制器返回数据时,框架再次序列化了相同的东西,它已经是json格式的字符串了!
问题内容: 我正在尝试将转换为,但是我不断遇到各种错误。我认为这是解决方案: 但这给出了以下异常: 问题答案: 将该参数解释为正则表达式。该是转义字符都 和。你需要对正则表达式进行两次转义: 但是你不必为此使用正则表达式,仅是因为你希望逐个字符地进行精确替换,并且这里不需要模式。因此就足够了: 更新:根据注释,你似乎想在JavaScript上下文中使用字符串。你最好使用它来覆盖更多字符。