2013-05-29 55 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}') 

具體而言,這考慮到幾個元素:在一個字符串=>.*?與惰性限定符

  • 多個引用
  • 正確處理轉義字符的\
相關問題