Python字符串Template带重音字符键替换失败问题求助
解决string.Template无法处理带重音字符键的问题
问题根源在于Python标准库的string.Template默认只允许ASCII字母、数字和下划线作为键名的合法字符(默认idpattern为[a-z_][a-z0-9_]*,不区分大小写),带重音的Unicode字符不在匹配范围内,因此无法完成替换。
解决方案:自定义Template子类扩展键名规则
通过继承Template并重写idpattern属性,将Unicode字母纳入合法键名的匹配范围,即可支持带重音的键。
示例代码:
from string import Template class UnicodeTemplate(Template): # 匹配Unicode字母/下划线开头,后续可跟Unicode字母、数字、下划线 idpattern = r'[^\d\W][\w]*' # 测试使用 d = {'vérité': 'truth'} msg = 'je veux la ${vérité}' msg = UnicodeTemplate(msg).safe_substitute(**d) print(msg) # 输出: je veux la truth
说明
[^\d\W]表示匹配非数字、非非单词字符(即Unicode字母或下划线),确保键名首字符符合规则[\w]*表示匹配任意长度的Unicode字母、数字或下划线,覆盖键名的后续字符- 该方案支持所有Unicode字母(包括带重音的字符如
é、à、ñ等),无需手动指定特定重音范围
内容的提问来源于stack exchange,提问作者user2879706
相关产品推荐
相关产品推荐

