正则表达式替换除第一个和最后一个字符

时间:2013-04-22 04:31:20

标签: python regex replace

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

示例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()操作时,包括第一个和最后一个双引号字符在内的所有内容都将被替换。在上面的示例中,输出字符串变为:\“这是一个Test \”。

3 个答案:

答案 0 :(得分:6)

我不了解你,但我会这么做:

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

当然,这会产生一大堆假设 - 最强的是第一个和最后一个字符总是双引号......

也许这会好一点:

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

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

答案 1 :(得分:2)

正如@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"

答案 2 :(得分: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"

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

第二个正则表达式会更改前导引号(如果没有引号,则无效。)

第三个正则表达式更改了尾随引用(如果没有尾随引号,则无效)。