介绍:string模块可以追溯到最早的Python版本中。现在很多的被移植为str和unicode对象的方法,在python3.0中会被完全去除。string模块中,有很多有用的常量和累,用来处理string和unicode对象。

一、 函数

  1、capwords()的作用是将一个字符串中所有单词的首字母大写;

1 import string
2 s = 'We believe one thing,today is difficult,tomorrow is more difficult,but the day after tomorrow is beautiful'
3 print s
4 print string.capwords(s)
5 print string.capwords(s,',')

执行结果:
We believe one thing,today is difficult,tomorrow is more difficult,but the day after tomorrow is beautiful
We Believe One Thing,today Is Difficult,tomorrow Is More Difficult,but The Day After Tomorrow Is Beautiful
We believe one thing,Today is difficult,Tomorrow is more difficult,but the day after tomorrow is beautiful

capwords(s,seq) 中可以传递两个参数,第一个是需要处理的字符串;第二个是使用什么条件进行拆分(默认空格);

该函数的工作原理死,先使用split拆分转变为大写以后,在使用join结合。

  2、maketrans()函数将创建转换表,可以用来结合translate()方法将一组字符串修改为另一组字符

1 import string
2 s = 'We believe one thing,today is difficult,tomorrow is more difficult,but the day after tomorrow is beautiful'
3 leet = string.maketrans('abegiloprstz', '463611092572')
4 print s
5 print s.translate(leet)

执行结果:

We believe one thing,today is difficult,tomorrow is more difficult,but the day after tomorrow is beautiful
W3 63113v3 0n3 7h1n6,70d4y 15 d1ff1cu17,70m0220w 15 m023 d1ff1cu17,6u7 7h3 d4y 4f732 70m0220w 15 634u71fu1

maketrans(fromstr, tostr)中需必须传递两个参数,第一个是需要替换的字符,第二个是替换成为什么字符,需要注意的是两个字符串必须长度相同,否则会报异常。

二 模板

  主要使用的是string.Template拼接,变量可以使用前缀$ 来标识($var)或者使用大括号进行区分(${var})

   1、下面做一个模板和使用%操作符的比较

 1 import string
 2 val = {'var':'Victory'}
 3 t = string.Template("""
 4 Variable : $var
 5 Escape   : $var
 6 Variable in text : ${var}iable
 7 """)
 8 print  'TEMPLATE:',t.substitute(val)
 9
10 s = """
11 Variable : %(var)s
12 Escape   : %%
13 Variable in text : %(var)siable
14 """
15 print "INTERPOLATION:", s % val

  执行结果:

  TEMPLATE:
  Variable : Victory
  Escape   : Victory
  Variable in text : Victoryiable

  INTERPOLATION:
  Variable : Victory
  Escape   : %
  Variable in text : Victoryiable

  在这两种情况下,触发器字符($ or %) 都要写连词来完成转义,其中此处需要注意的是使用% 进行传递字典参数时,方式是%(var)s 后面的s必不可少不然会报异常

  模板与标准字符串拼接有一个重要的区别,即模板不考虑参数类型都是字符串,不会出现控制几位有效情况出现。

  2、使用safe_substitute() 方法,可以避免未能提供模板所需全部参数值时产生的异常

1 import string
2 val = {'var':'Victory'}
3 t = string.Template("$var is here but $missing is not provided")
4 try:
5     print 'substiture()          :',t.substitute(val)
6 except KeyError,err:
7     print "ERROR:", str(err)
8
9 print 'safe_substitute():' , t.safe_substitute(val)

  执行结果:

  substiture()          : ERROR: 'missing'
  safe_substitute(): Victory is here but $missing is not provided

  由于val中没有missing的值,所以会把出一个异常,但是在safe_substitute()中不会抛出这个错误,它会捕获这个异常,并在文本中保留变量表达式

三、高级模板

  可以修改string.Tempate默认语法,调整正则表达式,最简单的是修改delimiter 和 idpattern

  

 1 import string
 2 template_text = """
 3     Delimiter :%%
 4     Replaced : %with_underscore
 5     Ignored : %notunderscored
 6 """
 7 d = {   'with_underscore' :'repaced',
 8         'notunderscored':'not replaced'
 9      }
10 class MyTemplate(string.Template):
11     delimiter = '%'
12     idpattern = '[a-z]+_[a-z]+'
13
14 t = MyTemplate(template_text)
15 print 'Modified ID pattern:'
16 print t.safe_substitute(d)

  执行结果:  

  Modified ID pattern:

   Delimiter :%
      Replaced : repaced
      Ignored : %notunderscored

  在以上的例子中,我们更改了替换规则,定界符从$变成了%,变量名必须包含一个_,所以Ignored中没有获得值。要完成更复杂的修改,可以覆盖pattern属性。

  定义一个全新的正则表达式,所提供的模式必须包含四个命名组,分别对应转义定界符、命名变量、用大括号括住的正则表达式,已经不合法的定界符模式。

1 import string
2 t = string.Template('$var')
3 print t.pattern.pattern

  执行结果:分别代表上面的四种命名组

      \$(?:
      (?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
    )
   下面,我们就拉定义一个新的模式

 1 import string
 2 import re
 3
 4 class MyTemplate(string.Template):
 5     delimiter = '{{'
 6     pattern = r'''
 7                     \{\{(?:
 8                       (?P<escaped>\{\{)|
 9                       (?P<named>[_a-z][_a-z0-9]*)\}\}|
10                       (?P<braced>[_a-z][_a-z0-9]*)\}\}|
11                       (?P<invalid>)
12                     )
13                 '''
14 t = MyTemplate('''
15     {{{{
16     {{var}}
17 ''')
18 print 'MATCHES:',t.pattern.findall(t.template)
19 print 'SUBSTITUTED: ',t.safe_substitute(var = 'relacement')

  执行结果:

  MATCHES: [('{{', '', '', ''), ('', 'var', '', '')]
  SUBSTITUTED:  
      {{
      relacement

  注意named 和 braced 模式必须单独提供,尽管看上去是一样的。

转载于:https://www.cnblogs.com/victroy/p/4012397.html

每日一“酷”之string相关推荐

  1. 每日一“酷”之Cookie

    Cookie---Http Cookie 作用:Cookie模块定义一些类来解析和创建HTTP cookie首部 Cookie模块为大多数符合RFC 2109的cookie实现一个解析器.这个实现没有 ...

  2. 说说 kooxoo 酷讯吧

    说说 kooxoo 酷讯吧 我习惯每周花点时间在看kooxoo酷讯上,应该算是骨灰级的了.对于kooxoo酷讯的界面的变化,功能的改进,甚至诸多seo的手法都看的很多. 题记 我是kooxoo的老用户 ...

  3. 不注册微服务号如何使用Java实现每日给女友微信发送早安等信息?

    前言 据说这个功能最近在抖音上很火,我没有抖音,没有看到. 但是我在掘金和CSDN上看了,相关案例确实很多,但是大家都是借助于了微信服务号,在我看来,效果很不佳. 其实我原来的初衷是这样的,每天定时给 ...

  4. 每日一文APP实现(网页json解析)

    hello,又是我鑫鑫 今天给大家带来每日一文APP的实现,从中会用到网页json解析,这里懂的都懂啊,这篇文章多多少少对你也有点启发,那么话不多说,直接看代码吧 -MainActivity.java ...

  5. 还在手动发早安吗?教你用java实现每日给女友微信发送早安

    摘要:教你如何用java实现每日给女友微信发送早安等微信信息. 本文分享自华为云社区<java实现每日给女友微信发送早安等微信信息>,作者:穆雄雄 . 前言 据说这个功能最近在抖音上很火, ...

  6. java实现每日给女友微信发送早安等微信信息

    大家好,我是雄雄. 前言 据说这个功能最近在抖音上很火,我没有抖音,没有看到. 但是我在掘金和CSDN上看了,相关案例确实很多,但是大家都是借助于了微信服务号,在我看来,效果很不佳. 其实我原来的初衷 ...

  7. 爬虫概念与编程学习之如何爬取视频网站页面(用HttpClient)(二)

    编写代码 运行 <!DOCTYPE html><html><head><meta http-equiv="X-UA-Compatible" ...

  8. 爬虫概念与编程学习之如何爬取视频网站页面(三)

    先看,前一期博客,理清好思路. 爬虫概念与编程学习之如何爬取网页源代码(一) 爬虫概念与编程学习之如何爬取视频网站页面(用HttpClient)(二) 不多说,直接上代码. 编写代码 运行 <! ...

  9. 【iOS】—— 调用手机相机和相册

    在app开发过程中,会有很多需要调取摄像头的地方,例如上传头像,上传图片等,并且又的是会包含直接拍照或者是从相册取图片来完成上传的,这里我就大概给大家说说如何调用手机的相机和相册. 需要用到的库: # ...

最新文章

  1. cpu渲染测试软件,CineBench渲染能力测试_CPUCPU评测-中关村在线
  2. python3.7.2 pip 出现locations that require TLS/SSL异常处理方法
  3. Visual Studio 2015软件安装教程
  4. angularJs自定义模块
  5. python调用百度接口实现ocr识别_Python调用百度OCR实现图片文字识别的示例代码
  6. 基于JAVA+SSM+MYSQL的菜谱学习平台
  7. Nginx——自定义错误页面
  8. PTA 循环结构 7-3 简写转全称
  9. oracle分区表的作用
  10. C++ QT开发人机象棋(界面表示)
  11. QT3D学习之路03
  12. 大气湍流退化图像复原技术研究及DSP实现
  13. 计算机专业学生u盘32g够用吗,很超值:为什么我的32G USB只有28.8g?
  14. 辨析三种一致性:缓存一致、内存一致、数据一致
  15. 植被覆盖度(FVC)计算
  16. 『天涯杂谈』 整理后的有关《新概念》英语的学习方法
  17. 常用webshell提权方法
  18. Facebook账号频繁被封号?全新Facebook防关联指南请收好
  19. HTML初始代码 注解
  20. 戴尔刀片服务器型号,戴尔 PowerEdge M640 刀片式服务器:服务器 | Dell 中国大陆

热门文章

  1. 谈谈spring-boot不同包结构下,同样的类名冲突导致服务启动失败解决方案
  2. 关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决
  3. 在idea中使用@Test注解报错的解决方案
  4. 没有UITableViewController的UIRefreshControl
  5. 在一行中捕获多个异常(块除外)
  6. 如何实施基本的“长轮询”?
  7. 如何将零填充到字符串?
  8. 电脑删除文件需要管理员权限怎么办
  9. 如何显示win11隐藏文件
  10. moveit环境引入代码