在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中查看变量内存地址的方法
May 05 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
May 24 Python
windows下python之mysqldb模块安装方法
Sep 07 Python
python随机取list中的元素方法
Apr 08 Python
python pygame模块编写飞机大战
Nov 20 Python
Django-Model数据库操作(增删改查、连表结构)详解
Jul 17 Python
Python安装selenium包详细过程
Jul 23 Python
Python 实现的 Google 批量翻译功能
Aug 26 Python
使用python制作一个解压缩软件
Nov 13 Python
python统计字符串中字母出现次数代码实例
Mar 02 Python
Python 串口通信的实现
Sep 29 Python
Pycharm 如何一键加引号的方法步骤
Feb 05 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
php中opendir函数用法实例
2014/11/15 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
2015/01/04 PHP
WampServer搭建php环境时遇到的问题汇总
2015/07/23 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
根据key删除数组中指定的元素实现方法
2017/03/02 PHP
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
jQuery表单验证插件解析(推荐)
2016/07/21 Javascript
详解nodejs微信公众号开发——1.接入微信公众号
2017/04/10 NodeJs
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
2017/05/08 jQuery
详解如何使用webpack打包Vue工程
2017/05/27 Javascript
jQuery:unbind方法的使用详解
2017/08/14 jQuery
详解Vue如何支持JSX语法
2017/11/10 Javascript
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
python之模拟鼠标键盘动作具体实现
2013/12/30 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
百联网上商城:i百联
2017/01/28 全球购物
加拿大女包品牌:Matt & Nat
2017/05/12 全球购物
享誉全球的多元化时尚精品购物平台:Farfetch发发奇(支持中文)
2017/08/08 全球购物
高品质和独特的产品世界:Creations and Collections
2018/01/07 全球购物
Merrell美国官网:美国登山运动鞋品牌
2018/02/07 全球购物
施华洛世奇日本官网:SWAROVSKI日本
2018/05/04 全球购物
统计学专业毕业生的自我评价分享
2013/11/28 职场文书
员工培训邀请函
2014/01/11 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
2015年党员发展工作总结
2015/05/13 职场文书
绿里奇迹观后感
2015/06/15 职场文书
队列队形口号
2015/12/25 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书
python实现简单石头剪刀布游戏
2021/10/24 Python