Python 中子类化 string.Template 的示例?

2024-04-02

尽管我在文档中看到了多次这样做的参考,但我还没有找到在 Python 中子类化 string.Template 的好例子。

网上有这方面的例子吗?

我想将 $ 更改为不同的字符,并且可能更改标识符的正则表达式。


来自蟒蛇docs http://docs.python.org/library/string.html:

高级用法:可以推导 要自定义的 Template 子类 占位符语法、分隔符 字符,或整个常规 用于解析模板的表达式 字符串。为此,您可以覆盖 这些类属性:

  • 分隔符 – 这是描述占位符的文字字符串 引入分隔符。默认 价值$。请注意,这不应该是 正则表达式,如 实现将调用 re.escape() 根据需要在此字符串上。

  • idpattern – 这是描述模式的正则表达式 非大括号占位符(大括号 将自动添加为 合适的)。默认值为 正则表达式 [_a-z][_a-z0-9]*。

Example:

from string import Template

class MyTemplate(Template):
    delimiter = '#'
    idpattern = r'[a-z][_a-z0-9]*'

>>> s = MyTemplate('#who likes $what')
>>> s.substitute(who='tim', what='kung pao')
'tim likes $what'

在Python 3中:

3.2 版本中的新功能。

或者,您可以提供整个正则表达式模式 通过覆盖类属性模式。如果你这样做,价值 必须是具有四个命名捕获组的正则表达式对象。 捕获组对应于上面给出的规则,以及 无效占位符规则:

  • escaped – 该组与转义序列匹配,例如$$,采用默认模式。
  • 命名 – 该组与无花括号的占位符名称匹配;它不应包含捕获组中的分隔符。
  • 花括号 – 该组与花括号括起来的占位符名称匹配;它不应在捕获中包含分隔符或大括号 团体。
  • 无效 – 该组与任何其他分隔符模式(通常是单个分隔符)匹配,并且它应该出现在常规中的最后 表达。

Example:

from string import Template
import re

class TemplateClone(Template):
    delimiter = '$'
    pattern = r'''
    \$(?:
      (?P<escaped>\$) |   # Escape sequence of two delimiters
      (?P<named>[_a-z][_a-z0-9]*)      |   # delimiter and a Python identifier
      {(?P<braced>[_a-z][_a-z0-9]*)}   |   # delimiter and a braced identifier
      (?P<invalid>)              # Other ill-formed delimiter exprs
    )
    '''

class TemplateAlternative(Template):
    delimiter = '[-'
    pattern = r'''
    \[-(?:
       (?P<escaped>-) |            # Expression [-- will become [-
       (?P<named>[^\[\]\n-]+)-\] | # -, [, ], and \n can't be used in names
       \b\B(?P<braced>) |          # Braced names disabled
       (?P<invalid>)               #
    )
    '''

>>> t = TemplateClone("$hi sir")
>>> t.substitute({"hi": "hello"})
'hello sir'

>>> ta = TemplateAlternative("[-hi-] sir")
>>> ta.substitute({"hi": "have a nice day"})
'have a nice day sir'
>>> ta = TemplateAlternative("[--[-hi-]-]")
>>> ta.substitute({"hi": "have a nice day"})
'[-have a nice day-]'

显然也可以省略任何正则表达式组escaped, named, braced or invalid禁用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中子类化 string.Template 的示例? 的相关文章

随机推荐

  • 我应该如何使用 Hibernate 从 JPQL 查询引用内部枚举(在实体内定义)?

    我有一个实体类如下 package stuff Entity class Thing Id GeneratedValue private Long id Basic Enumerated private State state public
  • 如果不存在则创建文件夹路径(从 VBA 保存)

    我在工作表中有一个项目列表 如下所示 我的代码遍历每一行并对供应商进行分组 并将一些信息复制到每个供应商的工作簿中 在此场景中 有 2 个唯一的供应商 因此将创建 2 个工作簿 这有效 接下来我想将每个工作簿保存在特定的文件夹路径中 如果文
  • 带有 nginx 的网络服务器一直工作到创建 .save 文件

    在过去 48 小时内到处进行谷歌搜索以找出为什么我的服务器突然停止工作后 最后 我自己找到了答案 我决定将其发布在这里 供那些在整个周末都在谷歌上搜索如此琐碎事情的人使用 在 nginx 上加载了所有内容 LEMP 工作完美 但后来我尝试进
  • Excel 中的数据整理 - 重新排列列和行

    我有一个巨大的 Excel 数据集 我想重新排列行和列 这是数据的片段 它看起来是什么样子以及我希望它看起来是什么样子 Area Channel Unit Year1 Year2 Year3 Year4 bel dc share 25 36
  • 使用 java11 构建和部署 javafx 应用程序

    我按照以下步骤操作https blog jetbrains com idea 2013 03 packaging javafx 2 applications in intellij idea 121 https blog jetbrains
  • 为什么 SQL Server SET DEADLOCK_PRIORITY HIGH 不被遵守?

    我捕获了 SQL Server 2012 死锁图 使用盖尔 肖的 https www red gate com simple talk sql performance sql server deadlocks by example 查询 显
  • MongoDB C# 连接/断开(官方驱动程序)

    请告诉我如何通过官方 C 驱动程序连接 断开到 MongoDB 问题很简单 乍一看问题很微不足道 但是 1 我是否需要自己调用Disconnect方法 或者它会被诸如Dispose之类的方法关闭 2 每次需要向Mongo发出请求时都需要连接
  • statsmodel 预测开始和结束索引

    我正在尝试实现 statsmodel 包中的预测功能 prediction results predict start 1 end len test exog test 输入 测试和输出预测的日期不一致 前者为2012年1月4日至2012年
  • getter 和 setter 的 Google 样式指南属性

    我对其中的一项建议感到好奇有关属性的 Google Python 风格指南 https google github io styleguide pyguide html Properties 他们在其中给出了以下示例 class Squar
  • SQLite 与 Android NDK

    是否可以在 Android 手机上将 SQLite 与 C 结合使用 我还没有找到任何关于如何实现这一点的文档 只需从以下位置下载 SQLite3 合并源文件 http www sqlite org download html http w
  • 如何将 Xcode 项目转换为使用 ARC(自动引用计数)?

    当我运行 Convert to Obj C 时 它首先运行预检查 我希望预检查忽略一些文件 并且我认为可以在这些文件上设置编译器标志 fno objc arc 但预检查阶段似乎忽略了该标志 并重置了它 所以我真的不知道如何超越预检查 预检查
  • 按名称调用 Django celery 任务

    我需要从models py调用一个celery任务 在tasks py中 唯一的问题是 tasks py导入models py 所以我无法从models py导入tasks py 有没有什么方法可以仅使用名称来调用 celery 任务 而无
  • 将多个数组作为参数传递给 Bash 脚本?

    我看过 但只看到了脚本中传递的一个数组的答案 我想将多个数组传递给 bash 脚本 该脚本将它们分配为单独的变量 如下所示 myScript sh array1 array2 array3 这样 var1 array1 and var2 a
  • Java 和 C++ 中的简单变量

    我在一些资料中看到这样一句话 在 Java 中 简单数据类型 例如 int 和 char 的运行方式与 C 中一样 我想知道 Java 和 C 中它们实际上是不同的 在C 中 像Java中的基元这样的简单变量也被分配了一个内存地址 因此C
  • 使用 SQL 获取每小时统计信息

    我们有一张桌子 名字 员工注册 有字段 employeeNo employeeName Registered on Here 注册日期是一个时间戳 我们要求在几天内按小时进行注册 例如 08 年 1 月 1 日 12 点 下午 1 点 15
  • C# 为 ++ 运算符生成 IL - 前缀/后缀表示法何时以及为何更快

    由于这个问题是关于增量运算符和前缀 后缀表示法的速度差异 我将非常仔细地描述这个问题 以免 Eric Lippert 发现它并激怒我 有关我为什么要问的更多信息和更多详细信息 请访问http www codeproject com KB c
  • Silverlight:拉伸到 StackPanel 中的剩余空间

    我有一个带有两个元素的垂直 StackPanel 一个按钮和一个列表框 如何让列表框拉伸到剩余页面高度
  • 将一个 Artifactory 连接到另一个 Artifactory

    我们的设置包括一个全公司范围的 Artifactory 它保存内部构建的工件 并出去获取公开可用的工件 我正在尝试在我们的位置建立一个本地 Artifactory 它将通过常规互联网获取公开可用的工件 但会连接到公司范围内的 Artifac
  • Python open("x", "r") 函数,我如何知道或控制文件应该具有哪种编码?

    如果 python 脚本使用open filename r 函数打开并随后读取文本文件的内容 我如何知道该文件应该具有哪种编码 请注意 由于我是从自己的程序执行此脚本 因此如果有任何方法可以通过环境变量来控制它 那么这对我来说就足够了 顺便
  • Python 中子类化 string.Template 的示例?

    尽管我在文档中看到了多次这样做的参考 但我还没有找到在 Python 中子类化 string Template 的好例子 网上有这方面的例子吗 我想将 更改为不同的字符 并且可能更改标识符的正则表达式 来自蟒蛇docs http docs