Python re模块错误地反斜杠

时间:2014-01-06 01:03:54

标签: python regex

我正在使用Python的3.3 re 模块。我想更改一个文档,其中用于强调单词在星号之间放入另一个单词,其中相同重点的标记为“{\ em ...}”(排版 ConTeXt 系统)

例如句子

Shakespeare wrote *Hamlet*.

应该转化为

Shakespeare wrote {\em Hamlet}.

以下正则表达式完美地定位并提取所需信息:

>>> import re
>>> pc_em = re.compile(r'\*(.+?)\*')
>>> emph = 'Shakespeare wrote *Hamlet*.'
>>> m = pc_em.search( emph )
>>> m.group(1)
'Hamlet'

但我一直无法找到任何方法来进行最后的替换:

>>> pc_em.sub( r'{\em \g<1>}', emph )
'Shakespeare wrote {\\em Hamlet}.'
>>> pc_em.sub( r'{\\em \g<1>}', emph )
'Shakespeare wrote {\\em Hamlet}.'
>>> pc_em.sub( '{\\em \g<1>}', emph )
'Shakespeare wrote {\\em Hamlet}.'

有人知道如何在最后的括号内得到一个反斜杠,还是这个错误?

提前致谢

1 个答案:

答案 0 :(得分:7)

更换工作正常。解释器打印字符串的表示而不是字符串本身,因此反斜杠被转义。

如果你print(pc_em.sub( r'{\em \g<1>}', emph)),你会发现它是正确的。