2015-02-05 41 views
1

我使用這個正則表達式與1985年替換字符串內的年形式'85的所有ocurrencesPython的替代今年提到像'85與1985年

import re 
re.sub("'(\d\d)", "19\1", "Today '45") 

但結果我得到的回覆是遠預計:

'Today 19\x01' 

我期望得到Today 1945。我想知道什麼是正確的做法。任何幫助非常感謝。

+3

使用'r'作爲字符串原始字符串:'re.sub(r「'(\ d \ d)」,r「19 \ 1」,「Today '45」)' – 2015-02-05 16:17:10

回答

4

使字符串原始字符串

>>> re.sub(r"'(\d\d)", r"19\1", "Today '45") 
'Today 1945' 

或者爲Avinash建議,使用單詞邊界\b。他們是更好的,因爲他們會幫助你忽略不是兩位數字,像3456

>>> re.sub(r"'(\d{2})\b", r"19\1", "Today '45, '3456") 
"Today 1945, '3456" 
+0

@AvinashRaj Thanks ...編輯 – 2015-02-05 16:24:34

+0

@AvinashRaj:但是這個撇號不應該在後視斷言中,否則它不會被刪除。 – 2015-02-05 16:26:01

+0

哦,我沒有注意到..''(?= \ d {2} \ b)或''(\ d {2})\ b' – 2015-02-05 16:26:32

3

參考該組的\g<1>代替\1

In [21]: re.sub("'(\d\d)", "19\g<1>", "Today '45") 
Out[21]: 'Today 1945' 

或使用原始字符串:

In [22]: re.sub("'(\d\d)", r"19\1", "Today '45") 
Out[22]: 'Today 1945' 

你的代碼不工作,因爲Python interprets \1 as a character.