2012-06-01 51 views
0

我想寫兩個過程來替換python中的字符串匹配的字符串。 我必須寫兩個程序。如何在Python中替換字符串中的某個字符串?

高清matched_case(新老): .........

注:輸入兩個字符串,它返回一個更換轉換器。

DEF更換(X,another_string): ..........

注:輸入是從前面的過程的轉換器,和一個字符串。它將應用轉換器的結果返回給輸入字符串。

例如:

a = matched_case('mm','m') 
print replacement(a, 'mmmm') 
it should return m 

另一個例子:

R = matched_case('hih','i') 
print replacement(R, 'hhhhhhihhhhh') 
it should return hi 

我不知道我怎麼可以用循環來做這件事。非常感謝任何人都可以給予提示。下面

+0

你的問題不是很清楚......你能清理一下 –

回答

3
def subrec(pattern, repl, string): 
    while pattern in string: 
     string = string.replace(pattern, repl) 
    return string 

foo('mm', 'm', 'mmmm')回報m

foo('hih', 'i', 'hhhhhhihhhhh')hi

+1

我建議使用與「str」不同的名稱作爲字符串變量,因爲這會隱藏「str」類,這可能會讓人困惑。否則,這個答案很好! – Blckknght

+0

是的,你是對的。我改變了它。 – shihongzhi

+0

來模擬熟悉的're.sub'簽名並指出替換是遞歸的:'def subrec(pattern,repl,string):...' – jfs

0

上的東西線可能會有所幫助:

def matched_case(x,y): 
    return x, lambda param: param.replace(x,y) 

def replacement(matcher, s): 
    while matcher[0] in s: 
     s = matcher[1](s) 
    return s 

print replacement(matched_case('hih','i'), 'hhhhhhihhhhh') 
print replacement(matched_case('mm','m'), 'mmmm') 

OUTPUT:

hi 
m 

matched_case(..)返回替換轉換器,所以最好使用lambda(匿名函數簡單表示)來表示它。這個匿名函數將字符串包裝到找到的和實際替換它的代碼中。

+0

非常感謝,它的工作原理! –

相關問題