2014-12-19 59 views
1

我試圖按順序對re.findall的結果進行替換。但是,在該示例中,出現了多個相同的字符串。例如:分別替換多次出現的相同字符串

text = "SOME TEXT, monday-friday, MORE TEXT, thursday, MORE TEXT, monday-friday' 
regex = re.compile(REGEX,re.I) 
possiblereplacements = regex.findall(text) 

的結果是:

'monday-friday','thursday','monday-friday' 

我然後需要爲每個元素的置換列表中的單獨。例如:

for item in possiblereplacements: 
    text = re.sub(item,item+' 11:00-17:00',text) 

但是這個替換所有實例所以最後你風與:

text = "SOME TEXT, monday-friday 11:00-17:00 11:00-17:00, MORE TEXT, thursday 11:00-17:00, MORE TEXT, monday-friday 11:00-17:00 11:00-17:00' 

如何調整這讓我期望的結果是:

text = "SOME TEXT, monday-friday 11:00-17:00, MORE TEXT, thursday 11:00-17:00, MORE TEXT, monday-friday 11:00-17:00'   
+0

什麼是'REGEX'這裏 – vks 2014-12-19 06:58:13

回答

1

相反re.findall,使用re.finditer。而不是像現在這樣的簡單的字符串列表,它會爲您提供一系列包含每個匹配的開始索引的MatchObject。然後你就知道在哪裏執行替換。

一個更好的方法是使用re.sub,其中替換字符串實際上可以是回調函數。該函數將爲每個匹配調用一次,因此您可以追加所需的文本。

3

單個更換有什麼問題?這裏不需要使用re.findall函數。只需將您的正則表達式放入捕獲組中,並將所有匹配的字符替換爲組索引1中的字符以及要連接的字符串。

re.sub(r'(regex)', r'\1 11:00-17:00', text) 

例子:

>>> text = "SOME TEXT, monday-friday, MORE TEXT, thursday, MORE TEXT, monday-friday" 
>>> re.sub(r'(?i)([^,]*day[^,]*)', r'\1 11:00-17:00', text) 
'SOME TEXT, monday-friday 11:00-17:00, MORE TEXT, thursday 11:00-17:00, MORE TEXT, monday-friday 11:00-17:00' 
相關問題