在原始字符串中删除替换

Zaa*_*aak 2 python regex replace

关于原始字符串,正则表达式和替换的简单问题:

我有一个字符串变量定义如下:

> print repr(foo)

'\n\t\t\n\t\tIf (GUTIAttach>=1) //In case of GUTI attach Enodeb should not ask RRCUecapa again\n\t\tUECapInfo;//Mps("( \\"rat_Type\\":0 \\"ueCapabilitiesRAT_Container\\":hex:011c0000000080 )");
Run Code Online (Sandbox Code Playgroud)

我的问题是人物"("")",我想,以取代他们"\(""\)"原字符串中,因为它会被后用作正则表达式模式.

我试着用这个方法:

foo_tmp= [inc.replace(')', '\)') for inc in foo]
foo_tmp= [inc.replace('(', '\)') for inc in foo_tmp]
foo = "".join(foo_tmp)
Run Code Online (Sandbox Code Playgroud)

结果给出:

 > print repr(foo)

'\n\t\t\n\t\tIf \\(GUTIAttach>=1\\) //In case of GUTI attach Enodeb should not ask RRCUecapa again\n\t\t{\n\t\t\tUECapInfo;//Mps\\("\\( \\"rat_Type\\":0 \\"ueCapabilitiesRAT_Container\\":hex:011c0000000080 \\)"\\);
Run Code Online (Sandbox Code Playgroud)

字符"("")"已被取代"\\(""//)"代替"\(""\)".这对我来说有点意外,所以你知道如何在不改变字符串的其他部分的情况下继续获得一个斜杠吗?

注意:.decode('string_escape')由于字符串的其余部分,该方法也无法正常工作.原始字符串中已存在的双斜线不得更改.

非常感谢你的帮助

Mar*_*ers 5

使用该re.escape()函数为您转义正则表达式元字符.

你所看到的是完全正常的Python行为; 你正在看一个python文字表示 ; 输出可以粘贴回Python解释器并重新创建值.因此,任何可以解释为转义码的内容都会为您转义; 单个\通常会加倍,以防止它被解释为转义序列的开始:

>>> '\('
'\\('
>>> print '\\('
\(
Run Code Online (Sandbox Code Playgroud)

你可以在你的foo字符串中的其他地方看到这个; 所述\n字符组合代表一个新行字符,两个单独的字符\n.如果你想包括文字\n文本,你必须反斜杠加倍\\n.而且在进入的价值foo,你会发现\\",这是一个反斜线后跟一个"报价.