2014-01-16 85 views
0

我正在嘗試查找字符串中的單詞,並以反向形式替換它們。 因此,當我有This 17時,我想要輸出sihT 17搜索並用反向替換字符串

但我不知道如何扭轉字符串本身在re.sub()

import re 

pat_word = re.compile("[a-zA-Z]+") 
input = raw_input ("Input: ") 

match = pat_word.findall(input) 
if match: 
    s = re.sub(pat_word, "reverse", input) 
    print s 

回答

2

您可以使用函數內部re.sub

s = re.sub(pat_word, lambda m:m.group(0)[::-1], input) 

或者乾脆:

s = pat_word.sub(lambda m:m.group(0)[::-1], input) 

來自help(re.sub)

子(圖案,REPL,串,計數= 0,標誌= 0)

返回由替換 REPL替換串中的圖案的最左邊 非重疊出現所獲得的字符串。 repl可以是字符串,也可以是可調用的; 如果處理了一個字符串,反斜槓轉義。如果它是可調用的 ,則它傳遞匹配對象,並且必須返回 要使用的替換字符串。

請注意,input是Python中的一個內置函數,所以不要將它用作變量名。

+0

謝謝你的解釋。我學到了很多! – Saphire

+0

@Saphire您的正則表達式中沒有組,默認情況下[group(0)](http://docs.python.org/2/library/re.html#re.MatchObject.group)返回整個比賽。順便說一句,你可以簡單地使用:'pat_word.sub(lambda m:m.group(0)[:: - 1],input)'這裏。 –