我有一个长字符串(一个"template"),其中包含 %MARK% 形式的“替换点”(单个给定标记在字符串中也可能出现更多次)。我想替换这些由 Python 字典控制的标记(它不包含标记的 % 符号),例如:
rep_dict = { "TITLE": "This is my title", "CONTENT": "Here it is the content" }
问题:简单地逐一调用replace()
方法并不是一个好的解决方案:之前的替换可能包含这些标记之一,那么就不能替换它!
解决方案应该足够快,因为我有很大的模板,并且我需要在一个大循环中替换其中的许多模板。我有一个非常丑陋且冗长的实现,其中有许多 find()
's,在替换过程中计算原始字符串中的偏移量等。我希望有一个更好,更紧凑的,和更快的解决方案。
最佳答案
最简单的解决方案是
import re
re.sub(r'%(.+?)%', lambda m: rep_dict[m.group(1)], YOUR_TEMPLATE)
不够快?有人说“不要使用正则表达式”,你就听从了吗?使用 Python 中的某些代码解析模板会更加复杂和缓慢(不要忘记,re
是用 C 编写的)。
关于python - 如何根据Python中的字典替换大字符串的子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7738562/