在 Python 中,将两大文本集 A 和 B 插入到另一大文本集 C 中的最快方法(即单遍方法)是什么。
例如 C 是:
.... ....
<<<A goes here>>>
.... ....
<<<B goes here>>>
.... ....
和“....”代表相当多的文本(即最多 20k)。
在适当的占位符处插入 A 和 B 的最佳方法是什么,其中 A 和 B 也不是“少量”文本(即最多 2k)。
我的第一个想法是:
C.replace("<<<A goes here>>>", A)
C.replace("<<<B goes here>>>", B)
但是因为它已经通过了两次,所以我希望有一个单次通过的解决方案。我考虑过正则表达式,但这似乎有点过分了。 string.Template 是一个选项,但语法不合适(即 $A 是一个可能与其他文本发生冲突的占位符,而 '$' 不会适合逃到别处)。
虽然 A 和 B 占位符在 C 中只出现一次,但我希望有一个解决方案可以扩展到更多的替换——即独立于替换的数量; O(n) 其中 n 是 len(C)。
感谢您的想法和建议。
谢谢。
布莱恩
请您参考如下方法:
str.find 的文档说它返回第一次出现的搜索字符串的索引,这(对我来说)意味着它不会遍历整个字符串。如果你知道"<<<A goes here>>>"总是先出现,我会这样做:
Aflag = "<<<A goes here>>>"
Bflag = "<<<B goes here>>>"
Aidx = C.find(Aflag)
Bidx = C.find(Bflag, Aidx+len(Aflag)+1)
newC = "".join((C[:Aidx], A, C[Aidx+len(Aflag)+1:Bidx], B, C[Bidx+len(Bflag)+1:]))
如果我的假设是正确的,这将最大限度地减少对字符串的搜索。
