在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静态方法实例
Jan 14 Python
python单例模式实例分析
Apr 08 Python
简单说明Python中的装饰器的用法
Apr 24 Python
python中尾递归用法实例详解
Apr 28 Python
Python爬虫爬取一个网页上的图片地址实例代码
Jan 16 Python
Python 带有参数的装饰器实例代码详解
Dec 06 Python
python读取目录下最新的文件夹方法
Dec 24 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
Apr 07 Python
详解python的super()的作用和原理
Oct 29 Python
Selenium环境变量配置(火狐浏览器)及验证实现
Dec 07 Python
Python用SSH连接到网络设备
Feb 18 Python
Pytest中skip和skipif的具体使用方法
Jun 30 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
十大催泪虐心动漫,你能坚持看到第几部?
2020/03/04 日漫
PHP新手上路(七)
2006/10/09 PHP
php小偷相关截取函数备忘
2010/11/28 PHP
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
PHP仿博客园 个人博客(1) 数据库与界面设计
2013/07/05 PHP
php文件上传简单实现方法
2015/01/24 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
php判断对象是派生自哪个类的方法
2015/06/20 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
2020/04/29 PHP
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
JavaScript中定义类的方式详解
2016/01/07 Javascript
在Html中使用Requirejs进行模块化开发实例详解
2016/04/15 Javascript
jQuery Mobile 触摸事件实例
2016/06/04 Javascript
Vue封装一个简单轻量的上传文件组件的示例
2018/03/21 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
js实现简单的日历显示效果函数示例
2019/11/25 Javascript
JavaScript中layim之整合右键菜单的示例代码
2021/02/06 Javascript
Python使用matplotlib实现在坐标系中画一个矩形的方法
2015/05/20 Python
使用Python对SQLite数据库操作
2017/04/06 Python
python中plot实现即时数据动态显示方法
2018/06/22 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
利用python绘制正态分布曲线
2021/01/04 Python
Python3爬虫ChromeDriver的安装实例
2021/02/06 Python
jupyter 添加不同内核的操作
2021/02/06 Python
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
英国在线定制百叶窗网站:Swift Direct Blinds
2020/02/25 全球购物
保安岗位职责
2014/02/21 职场文书
护士长竞聘书
2014/03/31 职场文书
2014年营业员工作总结
2014/11/18 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript