在Python中实现替换字符串中的子串的示例


Posted in Python onOctober 31, 2018

假如有个任务: 给定一个字符串,通过查询字典,来替换给定字符中的变量。如果使用通常的方法:

>>> "This is a %(var)s" % {"var":"dog"}
'This is a dog'
>>>

其实可以使用string.Template类来实现上面的替换

>>> from string import Template
>>> words = Template("This is $var")
>>> print(words.substitute({"var": "dog"})) # 通过字典的方式来传参
This is dog
>>> print(words.substitute(var="dog"))   # 通过关键字方式来传参
This is dog
>>>

在创建Template实例时,在字符串格式中,可以使用两个美元符来代替$,还可以用${}将 变量扩起来,这样的话,变量后面还可以接其他字符或数字,这个使用方式很像Shell或者Perl里面的语言。下面以letter模板来示例一下:

>>> from string import Template
>>> letter = """Dear $customer,
... I hope you are having a great time!
... If you do not find Room $room to your satisfaction, let us know.
... Please accept this $$5 coupon.
...     Sincerely,
...     $manager,
...     ${name}Inn"""
>>> template = Template(letter)
>>> letter_dict = {"name": "Sleepy", "customer": "Fred Smith", "manager": "Tom Smith", "room": 308}
>>> print(template.substitute(letter_dict))
Dear Fred Smith,
I hope you are having a great time!
If you do not find Room 308 to your satisfaction, let us know.
Please accept this $5 coupon.
    Sincerely,
    Tom Smith,
    SleepyInn
>>>

有时候,为了给substitute准备一个字典做参数,最简单的方法是设定一些本地变量,然后将这些变量交给local()(此函数创建一个字典,字典中的key就是本地变量,本地变量的值通过key来访问)。

>>> locals()   # 刚进入时,没有其他变量
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}
>>> name = "Alice" # 创建本地变量name 
>>> age = 18   # 创建本地变量age
>>> locals()   # 再执行locals()函数就可以看到name, age的键值队
{'name': 'Alice', '__builtins__': <module '__builtin__' (built-in)>, 'age': 18, '__package__': None, '__name__': '__mai
__', '__doc__': None}
>>> locals()["name"] # 通过键name来获取值
'Alice'
>>> locals()["age"] # 通过键age来获取值
18
>>>

有了上面的例子打底来看一个示例:

>>> from string import Template
>>> msg = Template("The square of $number is $square")
>>> for number in range(10):
...  square = number * number
...  print msg.substitute(locals())
...
The square of 0 is 0
The square of 1 is 1
The square of 2 is 4
The square of 3 is 9

另外一种方法是使用关键字参数语法而非字典,直接将值传递给substitute。

>>> from string import Template
>>> msg = Template("The square of $number is $square")
>>> for i in range(4):
...  print msg.substitute(number=i, square=i*i)
...
The square of 0 is 0
The square of 1 is 1
The square of 2 is 4
The square of 3 is 9
>>>

甚至可以同时传递字典和关键字

>>> from string import Template
>>> msg = Template("The square of $number is $square")
>>> for number in range(4):
...  print msg.substitute(locals(), square=number*number)
...
The square of 0 is 0
The square of 1 is 1
The square of 2 is 4
The square of 3 is 9
>>>

为了防止字典的条目和关键字参数显示传递的值发生冲突,关键字参数优先,比如:

>>> from string import Template
>>> msg = Template("It is $adj $msg")
>>> adj = "interesting"
>>> print(msg.substitute(locals(), msg="message"))
It is interesting message

以上这篇在Python中实现替换字符串中的子串的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现字符串与数组相互转换功能示例
Sep 22 Python
浅谈python中拼接路径os.path.join斜杠的问题
Oct 23 Python
Python实现操纵控制windows注册表的方法分析
May 24 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
Jun 27 Python
Python 运行.py文件和交互式运行代码的区别详解
Jul 02 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
Apr 14 Python
Python实现代码块儿折叠
Apr 15 Python
Django 解决新建表删除后无法重新创建等问题
May 21 Python
python的launcher用法知识点总结
Aug 07 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
Nov 10 Python
python urllib库的使用详解
Apr 13 Python
Python数据清洗工具之Numpy的基本操作
Apr 22 Python
python创建文件时去掉非法字符的方法
Oct 31 #Python
python3 中文乱码与默认编码格式设定方法
Oct 31 #Python
解决python中 f.write写入中文出错的问题
Oct 31 #Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
Oct 30 #Python
python将txt文件读入为np.array的方法
Oct 30 #Python
Python 将Matrix、Dict保存到文件的方法
Oct 30 #Python
python将字符串以utf-8格式保存在txt文件中的方法
Oct 30 #Python
You might like
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
探寻PHP脚本不报错的原因
2014/06/12 PHP
分享50个提高PHP执行效率的技巧
2015/12/26 PHP
jquery 插件学习(五)
2012/08/06 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
一个php+js实时显示时间问题
2015/10/12 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
理解javascript封装
2016/02/23 Javascript
jQuery插件EasyUI设置datagrid的checkbox为禁用状态的方法
2016/08/05 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
jQuery Layer弹出层传值到父页面的实现代码
2017/08/17 jQuery
使用node.js对音视频文件加密的实例代码
2017/08/30 Javascript
旺旺在线客服代码 旺旺客服代码生成器
2018/01/09 Javascript
解决微信小程序中的滚动穿透问题
2019/09/16 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
[02:32]DOTA2完美大师赛场馆静安体育中心观赛全攻略
2017/11/08 DOTA
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
2017/03/12 Python
Python 正则表达式实现计算器功能
2017/04/29 Python
python实现简易动态时钟
2018/11/19 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
Win10下python 2.7与python 3.7双环境安装教程图解
2019/10/12 Python
Python3实现将一维数组按标准长度分隔为二维数组
2019/11/29 Python
Django密码存储策略分析
2020/01/09 Python
python 爬取马蜂窝景点翻页文字评论的实现
2020/01/20 Python
基于python实现地址和经纬度转换
2020/05/19 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
python import 上级目录的导入
2020/11/03 Python
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
纽约海:Sea New York
2018/11/04 全球购物
2015年初三班主任工作总结
2015/05/21 职场文书