首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python中替换基于字典的大字符串的子字符串?

如何在Python中替换基于字典的大字符串的子字符串?
EN

Stack Overflow用户
提问于 2011-10-12 18:22:08
回答 2查看 317关注 0票数 2

我有一个包含%MARK%形式的“替换点”的长字符串(“模板”)(对于一个给定的标记,字符串中也可以有更多的匹配项)。我想替换这些标记,由Python字典控制(它不包含标记的%符号),如下所示:

代码语言:javascript
运行
复制
rep_dict = { "TITLE": "This is my title", "CONTENT": "Here it is the content" }

问题:简单地逐个调用replace()方法不是一个好的解决方案:前面的替换可能包含这些标记中的一个,然后不能替换!

解决方案应该足够快,因为我有很大的模板,并且我需要在一个大循环中替换其中的许多模板。我有一个非常丑陋和很长的实现,有很多find(),在替换过程中计算原始字符串中的偏移量,等等。我希望有一个更好,更紧凑,更快的解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-12 18:26:18

最简单的解决方案是

代码语言:javascript
运行
复制
import re
re.sub(r'%(.+?)%', lambda m: rep_dict[m.group(1)], YOUR_TEMPLATE)

还不够快?有人说‘不要使用正则表达式’,你就照做了?使用Python语言中的一些代码解析模板会更加复杂和缓慢(别忘了,re是用C编写的)。

票数 3
EN

Stack Overflow用户

发布于 2012-03-21 06:21:44

这太棒了。我总是以没有时间学习RegEx为借口,但我总是尊重它。这篇文章给了我开始的必备条件。虽然这是我的解决方案,但我发现群呼在字典参数中混淆了:

代码语言:javascript
运行
复制
retVal          = re.sub(r'%title', theTitle, template)
retVal          = re.sub(r'%([a-z]+?)+', \
                    lambda m: myDict.get(m.group(0)[1:], ''), retVal)

字典里没有title,这就是为什么我先这么做的原因。团队中其他成员的要求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7738562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档