2013-05-29 118 views
3

我想将我所有的乳胶引用从\cite{authoryear}更改为[\Citealt{authoryear}]如何用Python中的sub进行搜索和替换

要做到这一点我想

re.sub(r"\cite{[a-zA-Z0-9]}", r"[\Citealt{a-zA-Z0-9]}]", "bla bla \cite{doe2013}") 

,但是这是行不通的。我怎样才能做到这一点?

+0

我尝试过're.sub(r'\ cite {(。*)}',r'[\ Citealt {\ 1}]','\ cite {123}')'但它仍然给出\\ [\\引用{123}]。如何处理这个反斜杠? – user2433705

+0

那是因为它应该是'r'\\ cite ...'。用双'\\'。 –

回答

1

您可以使用反向引用。你应该看看应用re.sub文档http://docs.python.org/2/library/re.html#re.sub我创建了一个小例子:

re.sub(r'\cite{(.*)}', r'[\Citealt{\1}]', '\cite{123}') 

括号表示群体,他们由在其中出现左括号的顺序编号。您可以使用反向引用\ 1 ... \ 9来引用前九个组。

+0

其实这个答案有几个问题:当多个'\ cite {}'存在时它不起作用,并且它不能正确处理'\'。 –

0

问题早就已经问及作者可能不关心它了......但是这是AFAIK更好的回答这个问题:

re.sub(r'\\cite{(.*?)}', r'[\\Citealt{\1}]', '\\cite{123} -- \\cite{234}') 

具体而言,这考虑到几个元素:在一个字符串=>.*?与惰性限定符

  • 多个引用
  • 正确处理转义字符的\
相关问题