当需要用python替换字符串时,如何有效地避免替换子字符串?
我想用它们的链接更新单词/短语 然而,由于单词短语可能是其他单词短语的子字符串,因此我正在寻找一种有效的方法来替换所有单词/短语,而无需重复替换 替代列表 例如:以下单词/短语需要在“>>”之后替换为相应的标记链接:当需要用python替换字符串时,如何有效地避免替换子字符串?,python,string,pandas,replace,substring,Python,String,Pandas,Replace,Substring,我想用它们的链接更新单词/短语 然而,由于单词短语可能是其他单词短语的子字符串,因此我正在寻找一种有效的方法来替换所有单词/短语,而无需重复替换 替代列表 例如:以下单词/短语需要在“>>”之后替换为相应的标记链接: ABC苹果>>[ABC苹果](http://abc_apple) ABC苹果>>[ABC苹果](http://abc_apples) 苹果>[苹果](http://apple) 苹果>>[苹果](http://apples) 苹果派>>[苹果派](http://apple_pie)
[ABC苹果](http://abc_apple)
[ABC苹果](http://abc_apples)
[苹果](http://apple)
[苹果](http://apples)
[苹果派](http://apple_pie)
[红苹果](http://red_apple)
[红苹果派](http://red_apple_pie)
- ABC苹果:{ABC苹果}
- ABC苹果:{}
- 苹果:{ABC苹果,ABC苹果,苹果,苹果派,红苹果,红苹果派}
- 苹果:{}
- 苹果派:{红苹果派}
- 红苹果:{红苹果派}
- 红苹果派:{}
"I like ABC Apple!"` >> `"I like [ABC Apple](http://abc_apple)!"
"I like ABC Apple!"` >> `"I like ABC [Apple](http://apple)!"
错误结果:
"I like ABC Apple!"` >> `"I like [ABC Apple](http://abc_apple)!"
"I like ABC Apple!"` >> `"I like ABC [Apple](http://apple)!"
有一个贪婪的朴素O(MN+MlogM)解(N个大小的字符串和M个大小的所有替换)
第一段是根据长度(O(MlogM))对可能的替换进行排序
然后你在原句中搜索一个替换,如果找到,你就做替换(O(N))。您需要为每个替换和顺序执行此操作;O(MN)也是如此
你按顺序搜索的事实应该解决(如果我理解得很好的话)你的问题为了在开发过程中保持上述复杂性,您可能需要一些技巧来避免阅读“已完成的替换”,但这应该不会太难
最后,我认为可以使用一些数据结构实现时间复杂度较低的解决方案,但实现起来更难有一个贪婪的天真O(MN+MlogM)解决方案(N个字符串大小和M个所有替换大小) 第一段是根据长度(O(MlogM))对可能的替换进行排序 然后你在原句中搜索一个替换,如果找到,你就做替换(O(N))。您需要为每个替换和顺序执行此操作;O(MN)也是如此 你按顺序搜索的事实应该解决(如果我理解得很好的话)你的问题
为了在开发过程中保持上述复杂性,您可能需要一些技巧来避免阅读“已完成的替换”,但这应该不会太难
最后,我认为使用一些数据结构可以找到时间复杂度更低的解决方案,但实现起来更困难显而易见的方法不起作用吗?从最长到最短处理替换列表。明显的不起作用吗?从最长到最短处理替换列表。