【发布时间】:2019-12-15 00:33:39
【问题描述】:
我想用他们的链接更新单词/短语。
但是,由于词组可能是其他词的子字符串,因此我正在寻找一种有效的方法来替换所有词/词组而不会重复替换。
替补名单
a 的示例:以下单词/短语需要在“>>”之后替换为相应的 markdown 链接:
- ABC苹果>>
[ABC Apple](http://abc_apple) - ABC 苹果 >>
[ABC Apples](http://abc_apples) - 苹果>>
[Apple](http://apple) - 苹果>>
[Apples](http://apples) - 苹果派>>
[Apple Pie](http://apple_pie) - 红苹果>>
[Red Apple](http://red_apple) - 红苹果派>>
[Red Apple Pie](http://red_apple_pie)
想法
如果我们有一个数据结构,每个单词/短语(子字符串)存储包含它们的单词/短语(字符串)(例如 list_l),我们可以在检查句子是否包含子字符串之前检查句子是否包含 list_l 中的元素
例如,现在我们有以下子字符串:{list_l(string)}
- ABC 苹果:{ABC 苹果}
- ABC 苹果:{}
- 苹果:{ABC 苹果,ABC 苹果,苹果,苹果派,红苹果,红苹果派}
- 苹果:{}
- 苹果派:{红苹果派}
- 红苹果:{红苹果派}
- 红苹果派:{}
但是,计算工作会很安静,因为 list_l 中的每个元素,我们仍然需要检查该元素的 list_l。
示例
一些要替换的句子作为例子(从后面走过):
- “我爱苹果派。”:红苹果派(x) >> 红苹果派(x) >> 苹果派(o) >> 红苹果派(x)
- “我喜欢ABC苹果!”:红苹果派(x)>>红苹果派(x)>>苹果(x)>>苹果(o)>>红苹果派(x) ) >> 红苹果(x) >> 红苹果派(x) >> 苹果派(x) >> 红苹果派(x) >> 苹果(x) >> ABC 苹果(x) >> ABC 苹果(o ) >> ABC 苹果(x)
计算量 O(n^3) 句子长度 x 替换列表长度 x list_l 长度
(原句>>结果句:)
预期结果:
"I like ABC Apple!"` >> `"I like [ABC Apple](http://abc_apple)!"
错误的结果:
"I like ABC Apple!"` >> `"I like ABC [Apple](http://apple)!"
【问题讨论】:
-
显而易见的行不通吗?处理从最长到最短的替换列表。
标签: python string pandas replace substring