3

什么是用转义反斜杠后跟双引号 (\") 替换字符串中的双引号 (") 的正则表达式,但字符串的第一个和最后一个字符除外。

示例 1:嵌入在字符串中的双引号

Input: "This is a "Test""
Expected Output: "This is a \"Test\""

示例 2:字符串中间没有双引号

Input: "This is a Test"
Expected Output: "This is a Test"

当我在 python 中执行 re.sub()操作时,包括第一个和最后一个双引号字符在内的所有内容都将被替换。在我上面的示例中,输出字符串变为:\"This is a Test\"。

4

3 回答 3

8

我不了解你,但我会以简单的方式做到这一点:

'"{}"'.format(s[1:-1].replace('"',r'\"'))

当然,这做了一大堆假设——最强的是第一个和最后一个字符总是双引号......

也许这会好一点:

'{0}{1}{2}'.format(s[0],s[1:-1].replace('"',r'\"'),s[-1])

它保留第一个和最后一个字符并转义中间的所有双引号。

于 2013-04-22T05:14:08.390 回答
5

正如@mgilson 所指出的,您可以将第一个和最后一个字符切掉,所以这个正则表达式基本上没有意义

>>> print re.sub(r'(?<!^)"(?!$)', '\\"', '"This is a "Test""')
"This is a \"Test\""
>>> print re.sub(r'(?<!^)"(?!$)', '\\"', '"This is a Test"')
"This is a Test"
于 2013-04-22T05:11:03.867 回答
1

不幸的是,我认为你不能用一个正则表达式来做到这一点。不过,您可以使用三个正则表达式来伪造它。

>>> x = '"This is "what" it is"'
>>> print x
"This is "what" it is"
>>> x = re.sub(r'"',r'\\"',x)
>>> print x
\"This is \"what\" it is\"
>>> x = re.sub(r'^\\"','"',x)
>>> print x
"This is \"what\" it is\"
>>> x = re.sub(r'\\"$','"',x)
>>> print x
"This is \"what\" it is"

第一个正则表达式将所有引号更改为转义引号。

第二个正则表达式将前导引号改回(如果不存在前导引号则无效)。

第三个正则表达式将尾随引号更改回来(如果不存在尾随引号则无效)。

于 2013-04-22T05:03:35.227 回答