2014-07-22 35 views
3

我正在尋找替換python中的字符串實例,但保持原來的大小寫。什麼是正則表達式替換python中的字符串的最佳方式,但保持它的情況?

例如,假設我用 '香蕉' 替換字符串 '雞蛋':

This recipe requires eggs. - >This recipe requires bananas.

Eggs are good for breakfast. - >Bananas are good for breakfast.

I'M YELLING ABOUT EGGS! - >I'M YELLING ABOUT BANANAS!

現在,我做了一個re.compile和.sub,但是我無法找出一個聰明的方法,而不必每次都明確聲明這三個變體。我正在替換大約100多個單詞,所以我想應該有一個更聰明,更pythonic的方式。

編輯:這不是一個以前問過的問題的重複。 - >有些區別:我用完全不同的詞取代單詞,而不是用標籤包裝它。另外,即使其全部大寫等,我也需要保留該案例。請不要在沒有完全閱讀問題的情況下標記爲重複。

回答

1

這裏關鍵的一點是,您可以在確定給定匹配的正確替換之前,將函數傳遞給re.sub進行各種檢查。此外,請使用re.I標誌來獲取所有情況。

import re 
def replace_keep_case(word, replacement, text): 
    def func(match): 
     g = match.group() 
     if g.islower(): return replacement.lower() 
     if g.istitle(): return replacement.title() 
     if g.isupper(): return replacement.upper() 
     return replacement  
    return re.sub(word, func, text, flags=re.I) 
    # return re.compile(word, re.I).sub(func, text) # prior to Python 2.7 

實施例:

>>> text = "Eggs with eggs, bacon and spam are good for breakfast... EGGS!" 
>>> replace_keep_case("eggs", "spam", text) 
Spam with spam, bacon and spam are good for breakfast... SPAM!