2017-07-24 81 views
-1

我想更換一些文字與別的東西,取決於Python3原文。例如,說我有"[[procedural programming|procedural programming languages]]",我需要更換與後來的文字,所以才procedural programming languages涉及替換原始字符串

一般情況下,我需要一個函數,它接受一個字符串和一個功能和應用功能的字符串,然後替換它。例如,扭轉了字符串可以做像這樣:

text = "123456 123456 84708467 11235" 
new_text = special_replace(text, lambda x: x[::-1]) 

>>> 654321 654321 84708467 11235 

或者前面的例子:

text = "[[procedural programming|procedural programming languages]] [meow|woof]" 
new_text = specail_replace(text, lambda x: x.replace("[[", "").replace("]]","").split("|")[1]) 

>>> procedural programming languages [meow|woof] 
+2

我不明白你的'special_replace'做什麼那是你傳遞的功能有所不同。爲什麼不直接調用lambda? –

+0

我剛剛在這個例子中意識到它並不是很清楚。添加一個編輯。 –

+0

我想你應該熟悉一下're.sub'功能(與一般的正則表達式)。 –

回答

2

您可以創建一個正則表達式,並使用re.sub與組引用來替換它們:

>>> text = "[[procedural programming|procedural programming languages]] [meow|woof]" 
>>> p = r"\[\[.*?\|(.*?)\]\]" 
>>> re.findall(p, text) 
['procedural programming languages'] 
>>> re.sub(p, r"\1", text) 
'procedural programming languages [meow|woof]' 

請注意,[,|]都必須轉義。這裏(.*?)是用於第二術語捕獲組,和\1引用該組中的替換字符串。

對於更復雜的東西,比如也扭轉了組,您可以使用一個回調函數:

>>> re.sub(p, lambda m: m.group(1)[::-1], text) 
'segaugnal gnimmargorp larudecorp [meow|woof]' 
+0

謝謝,正是我需要的! –