2014-12-19 58 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' 
相关问题