2011-10-06 39 views
3

我正在建立一個字符串函數來提取兩個標記之間的字符串內容。它返回一個提取列表Python函數查找兩個標記之間的字符串

def extract(raw_string, start_marker, end_marker): 
    ... function ... 
    return extraction_list 

我知道這是可以使用正則表達式來完成,但這個快?這將在我的過程中被稱爲數十億次。什麼是最快的方法來做到這一點?

如果標記相同並且出現次數奇數,會發生什麼情況?

如果開始和結束標記出現多次,該函數應返回多個字符串。

+0

「十億」?真?也許你應該把它寫成C擴展。 –

+0

不再像數百萬。 「爲什麼有數十億,當你有幾百萬」 –

回答

10

你可能不能去的速度比:

def extract(raw_string, start_marker, end_marker): 
    start = raw_string.index(start_marker) + len(start_marker) 
    end = raw_string.index(end_marker, start) 
    return raw_string[start:end] 

但是,如果你想嘗試正則表達式,只是盡力基準它。有一個很好的timeit模塊。

+0

同意。如果你的正則表達式是預編譯的,它可能不會比這慢,但使用@ viraraptor的解決方案可以避免可能發生的任何正則表達式開銷。我不確定python是否有這個功能,但是這樣也更容易閱讀和維護。 – andronikus

+0

感謝@viraraptor我喜歡這種使用索引和事實你已經佔多個單個字符的標記。如果開始和結束標記出現多次,會發生什麼情況?例如多個名字的引號。你想要返回引號中的項目列表 –

相關問題