2016-02-21 32 views
1

我正在嘗試編寫一個程序來使用字典替換文件中的文本。將文本從字典優先級替換爲較長的字符串

def preprocess(text, preprocessing_dict): 
    rc = re.compile('|'.join(map(re.escape, preprocessing_dict))) 
    def translate(match): 
    return preprocessing_dict[match.group(0)] 
    return rc.sub(translate, text) 

我想在子串之前先替換較長的字符串。在大多數情況下,上面的代碼片段似乎可以完成這項工作。例如,

preprocessing_dict = { 'ka': 'k', 'ka+i': '<k*' } 

ka+i任何實例由<k*和不k+i替換。

但是在較長版本的字典中(206鍵:從文本文件中讀取值對),'na': 'n', 'na+i': '<n*'na+i的任何實例都被n+i替換。但ka+i仍然正常工作。

我希望你能指點我正確的方向。謝謝。

+2

詞典沒有排序,你不能依賴那個。 – jonrsharpe

回答

3

您需要首先按排序順序拉出按鍵。

keys = sorted(preprocessing_dict.keys(), key=len, reverse=True) 
+0

謝謝。僅供將來可能有類似問題的人(我?)參考。下面的變化工作:'def preprocess(text,preprocessing_dict,sorted_keys):... map(re.escape,sorted_keys)'和'sorted_keys = sorted(preprocessing_dict.keys(),key = len,reverse = True)'' – nsoum