我正在使用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}.'
有人知道如何在最后的括号内得到一个反斜杠,还是这个错误?
提前致谢
帕
答案 0 :(得分:7)
更换工作正常。解释器打印字符串的表示而不是字符串本身,因此反斜杠被转义。
如果你print(pc_em.sub( r'{\em \g<1>}', emph))
,你会发现它是正确的。