2016-07-21 15 views
2

我試圖替換單詞之間的替換詞(例如on),如果它處於兩個子之間(例如<temp> & </temp>)但是換句話說存在哪些需要保持。2子(保持換句話說)

string = "<temp>The sale happened on February 22nd</temp>" 

替換後所需的字符串是:

Result = <temp>The sale happened {replace} February 22nd</temp> 

我使用正則表達式嘗試過,我只能夠弄清楚如何取代一切事物的兩個<temp>標籤之間說謊。 (因爲.*?)的

result = re.sub('<temp>.*?</temp>', '{replace}', string, flags=re.DOTALL) 

然而on以後可能會串不<temp></temp>之間出現,我不希望替換此。

+0

*它處於兩個子*之間 - 其中兩個子?你能否提供一個原始字符串和替換字符串的例子? – SilentMonk

+0

可悲的是,在重新模塊中不支持\ G和\ K。 –

+0

您希望的輸出不是有效的XML。您無法打開「」元素,然後關閉「」。 –

回答

0
re.sub('(<temp>.*?) on (.*?</temp>)', lambda x: x.group(1)+" <replace> "+x.group(2), string, flags=re.DOTALL) 

輸出:

<temp>The sale happened <replace> February 22nd</temp> 

編輯:

改變基於由Wiktor的和HolyDanna建議的正則表達式。

P.S:Wiktor對該問題的評論提供了一個更好的解決方案。

+0

實際上,正則表達式並不合適,這個想法是正確的。 –

+0

@WiktorStribiżew,謝謝。你能否詳細說明一下?如果你建議正確的正則表達式,我會替換它,否則如果你要回答這個問題,那麼我會根據你的回答刪除我的答案。 – SilentMonk

+0

這個工程,但是有可能將它限制在?如果它的外部標籤也取代 –

0

嘗試lxml

from lxml import etree 

root = etree.fromstring("<temp>The sale happened on February 22nd</temp>") 
root.text = root.text.replace(" on ", " {replace} ") 
print(etree.tostring(root, pretty_print=True)) 

輸出:

<temp>The sale happened {replace} February 22nd</temp> 
+0

我想你需要有代碼才能找到' Blckknght

+0

'string'是有效的XML。讓我們把這個問題寫下來,不要讓我們猜測。 –