2

只是一个关于原始字符串、正则表达式模式和替换的简单问题:

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

> 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 \\)"\\);

字符"("")"已被替换为"\\("and"//)"而不是"\("and "\)"。这对我来说有点出乎意料,所以你知道我怎样才能在不改变字符串其他部分的情况下只得到一个斜杠吗?

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

非常感谢你的帮助

4

1 回答 1

5

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

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

>>> '\('
'\\('
>>> print '\\('
\(

您可以在foo字符串的其他地方看到这一点;\n字符组合表示换行符,而不是两个单独的字符\n. 如果您想在文本中包含文字\n,则必须将反斜杠加倍为\\n. 进一步深入foo你会发现的值\\",它是一个反斜杠,后跟一个"引号。

于 2013-08-12T15:40:55.580 回答