2012-02-17 37 views
0

我無法找到一種方法串行搜索字符串和追加替換。假設我正在實施模板語言。簡化後的模板如下所示:有沒有python的方式串行搜索正則表達式的字符串,類似於java的re.appendReplacement和appendTail

在美好的一天##日期#中#國家#的Hello詞語。

想象一下很長的模板,其中有很多#SOMETHING#標籤。現在我想用正則表達式來解析這個,每次我發現#SOMETHING#,做一些python邏輯,用一些字符串替換它,追加它,然後繼續。我發現的只是我可以將字符串分解爲令牌和匹配,然後重新組裝。有沒有更好的,沒有生成所有這些字符串塊?也許我試圖優化太早,但在Java中,我們有方法,我想知道是否可以在Python中完成類似的事情。

http://docs.oracle.com/javase/tutorial/essential/regex/matcher.html

回答

6

您可以使用一個函數作爲re.sub的 「更新換代」。然後re.sub將爲字符串中的每個匹配調用你的函數,並且函數的返回值將是字符串中的替換。

+0

完美。只要StackOverflow允許,我會盡快接受。 – 2012-02-17 19:20:43

+0

這不就是re.sub函數在做什麼(或者對於javscript字符串)?從技術上來說,這個功能在做什麼(把它放在@KoliberServices的話語中是:「把字符串分解成標記並匹配並重新組合。」只是想我會指出這一點。在兩種語言中,字符串都是不可變的 – 2012-02-17 20:26:34

+0

在兩種語言中,字符串確實是不可變的,但在Java中,StringBuffers允許您編寫性能更好的字符串彙編代碼,並在最後將其轉換爲字符串。 Python會做到這一點,但我相信高級的嚮導會想到一些東西,而且,這樣做可以讓你節省內存,開始時你有sourceStr,如果你把它分解成標記,你的標記就會佔用內存。它一起你有destStr。做到位,你可以避免令牌,因爲你可以從srcString位置讀取,保存一些內存。 – 2012-02-18 09:50:23

相關問題