关于原始字符串,正则表达式和替换的简单问题:
我有一个字符串变量定义如下:
> 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 )");
我的问题是字符"("
和")"
,我想在原始字符串中用"\("
和"\)"
替换它们,因为它将作为正则表达式使用图案。
我尝试使用这种方法:
foo_tmp= [inc.replace(')', '\)') for inc in foo]
foo_tmp= [inc.replace('(', '\)') for inc in foo_tmp]
foo = "".join(foo_tmp)
结果给出:
> 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 \\)"\\);
字符"("
和")"
已替换为"\\("
和"//)"
,而不是"\("
和"\)"
。
这对我来说有点意外,所以你知道如何在不改变字符串的其他部分的情况下获得一个斜杠吗?
注意:由于字符串的其余部分,方法.decode('string_escape')
也无效。原始字符串中已存在的双斜线不得更改。
非常感谢你的帮助
答案 0 :(得分:5)
使用re.escape()
function为您转发正则表达式元字符 。
你所看到的是完全正常的Python行为;你正在看一个python文字表示;输出可以粘贴回Python解释器并重新创建值。因此,任何可以解释为转义码的内容都会为您转义;单个\
通常会加倍,以防止它被解释为转义序列的开始:
>>> '\('
'\\('
>>> print '\\('
\(
您可以在foo
字符串中的其他位置看到此信息。 \n
字符组合代表换行符,不两个单独的字符\
和n
。如果您希望在文本中包含文字\
和n
,则必须将反斜杠加倍\\n
。进一步查看foo
的值,您会找到\\"
,这是单个反斜杠,后跟"
引号。