我有一个包含%MARK%形式的“替换点”的长字符串(“模板”)(对于一个给定的标记,字符串中也可以有更多的匹配项)。我想替换这些标记,由Python字典控制(它不包含标记的%符号),如下所示:
rep_dict = { "TITLE": "This is my title", "CONTENT": "Here it is the content" }问题:简单地逐个调用replace()方法不是一个好的解决方案:前面的替换可能包含这些标记中的一个,然后不能替换!
解决方案应该足够快,因为我有很大的模板,并且我需要在一个大循环中替换其中的许多模板。我有一个非常丑陋和很长的实现,有很多find(),在替换过程中计算原始字符串中的偏移量,等等。我希望有一个更好,更紧凑,更快的解决方案。
发布于 2011-10-12 18:26:18
最简单的解决方案是
import re
re.sub(r'%(.+?)%', lambda m: rep_dict[m.group(1)], YOUR_TEMPLATE)还不够快?有人说‘不要使用正则表达式’,你就照做了?使用Python语言中的一些代码解析模板会更加复杂和缓慢(别忘了,re是用C编写的)。
发布于 2012-03-21 06:21:44
这太棒了。我总是以没有时间学习RegEx为借口,但我总是尊重它。这篇文章给了我开始的必备条件。虽然这是我的解决方案,但我发现群呼在字典参数中混淆了:
retVal = re.sub(r'%title', theTitle, template)
retVal = re.sub(r'%([a-z]+?)+', \
lambda m: myDict.get(m.group(0)[1:], ''), retVal)字典里没有title,这就是为什么我先这么做的原因。团队中其他成员的要求。
https://stackoverflow.com/questions/7738562
复制相似问题