一、使用多个界定符分割字符串

字符串.split(',')形式只适用于单一分割符的情况;多分割符同时应用的时候,可使用re.split()

>>> line = 'asdf fjdk; afed, fjek,asdf, foo'
>>> import re
>>> re.split(r'[;,\s]\s*', line)
['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']

>>> re.split(r'(?:;,\s)\s*', line) #须用非捕获形式,否则各个分割符也将出现在列表中
['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']

二、字符串开头或结尾匹配

  • 思路1:.startswith(str或tuple)、.endswith(str或tuple),用元组形式可匹配多项
  • 思路2:切片之后进行对比
  • 思路3:使用正则表达式,re.match(r'patterns', str)、re.search(r'patterns$', str)

三、字符串匹配和搜索:re模块,应用正则表达式

  re核心步骤就是先使用 re.compile() 编译正则表达式字符串, 然后使用match() , findall() 或者 finditer() 等方法以提高效率;捕获分组可以使得后面的处理更加简单,因为可以分别将每个组的内容提取出来:

>>> datepat = re.compile(r'(\d+)/(\d+)/(\d+)')
>>>
>>> m = datepat.match('11/27/2012')
>>> m
<_sre.SRE_Match object at 0x1005d2750>
>>> # Extract the contents of each group
>>> m.group()或m.group(0)
'11/27/2012'
>>> m.group(1)
''
>>> m.group(2)
''
>>> m.group(3)
''
>>> m.groups() #元组形式列出各分组的值
('', '', '')

findall() 方法会搜索文本并以列表形式返回所有的匹配,如果想以迭代方式返回匹配,可以使用 finditer() 方法来代替

>>> for m in datepat.finditer(text):
... print(m.groups())
...
('', '', '')
('', '', '')
>>>

四、查找和替换文本

  .replace:效率高,每次只能替换一个字符串;re.sub()/re.subn(),后者返回替换后的结果及替换的次数;.strip('=')/.lstrip('*')/.rstrip(' ')可用于支除字符串两端、左端、右端的指定字符

  常用到捕获分组形式\N:

>>> re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', '11/27/2016')
'2016-11-27'
>>> re.subn(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', '11/28/2016')
('2016-11-28', 1)

  对于更加复杂的情况,可指定一个替换回调函数对分组数据进行处理及格式化:

#!/usr/bin/env python3
#-*- coding=utf-8 -*-
import re
from calendar import month_abbr
yourdate = input('请输入日期dd/mm/yyyy: ')
m = re.search(r'(\d+)/(\d+)/(\d+)', yourdate)
datepat = re.compile(r'(\d+)/(\d+)/(\d+)') def mon_ch(m):
mon_name = month_abbr[int(m.group(2))]
return '{:=^10} {:-<5} {:*>8}'.format(m.group(3), mon_name, m.group(1)) #format可作用于任何值,不仅是str print(datepat.sub(mon_ch(m), yourdate))

五、 不区分大小写及多行查找、替换

  • re.findall(r'', yourtext, flags=re.I|re.M)    #多个flags用|连接
  • re.M 或用 \n|. 替换 . 即可实现多行匹配,后者适用性更强

六、字符串连接、合并

  优选print('', '', '', sep=':'),其次print(':'.join(str(x) for x in data)),最次使用连接符+;

七、处理字符串中的变量(名转换为值)

  Python不支持在字符串中对变量做简单的值替换,可通过format_map()、vars()实现,vars()或locals()是一个显示本地变量与其值的映射表(dict);

test = 'my name is {name}!'
name = input('请输入你的姓名:')
'Jack'
test.format_map(vars())
'my name is Jack!'

Python3 From Zero——{最初的意识:002~字符串和文本}的更多相关文章

  1. Python3 From Zero——{最初的意识:000~Initial consciousness}

    http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 a.编码 默认情况下,Python ...

  2. Python3 From Zero——{最初的意识:008~初级实例演练}

    一.构显国际橡棋8x8棋盘 #!/usr/bin/env python3 #-*- coding:utf-8 -*- color_0="\033[41m \033[00m" col ...

  3. Python3 From Zero——{最初的意识:006~数据编码与处理}

    一.读写CSV数据: #!/usr/bin/env python3 #-*- coding=utf8 -*- import csv with open('kxtx.csv', 'rt') as f: ...

  4. Python3 From Zero——{最初的意识:001~数据结构和算法}

    一.从队列两端高效插入.删除元素,及保留固定数量的数据条目: collections.deque([iterable[,maxlen=N]]) a = collections.deque([1, 2] ...

  5. Python3 From Zero——{最初的意识:007~函数}

    一.编写可接受任意数量参数的函数:*.** >>> def test(x, *args, y, **kwargs): ... pass ... >>> test(1 ...

  6. Python3 From Zero——{最初的意识:005~文件和I/O}

    一.输出重定向到文件 >>> with open('/home/f/py_script/passwd', 'rt+') as f1: ... print('Hello Dog!', ...

  7. Python3 From Zero——{最初的意识:004~迭代器和生成器}

    一.反向迭代:reversed() >>> a [1, 2, 3, 4] >>> for x in reversed(a): ... print(x, end=' ...

  8. Python3 From Zero——{最初的意识:003~数字、日期、时间}

    一.对数值进行取整:round(value,ndigits) >>> round(15.5,-1) #可以取负数 20.0 >>> round(15.5,0) #当 ...

  9. [转]python3字符串与文本处理

    转自:python3字符串与文本处理 阅读目录 1.针对任意多的分隔符拆分字符串 2.在字符串的开头或结尾处做文本匹配 3.利用shell通配符做字符串匹配 4.文本模式的匹配和查找 5.查找和替换文 ...

随机推荐

  1. BZOJ 2597: [Wc2007]剪刀石头布(费用流)

    传送门 解题思路 考虑全集-不能构成三元环的个数.如果三个点不能构成三元环,一定有一个点的入度为\(2\),继续扩展,如果一个点的度数为\(3\),则会失去3个三元环.对于一个点来说,它所产生的不能构 ...

  2. C++语言编程基础

    C++程序设计语言可以看作C语言的改进和升级,不仅完全兼容了C语言的语法和函数库,还引入了面向对象.运算符重载.多态性.数据流和模板等最新的编程思想.极大地保证了源代码的生产率.质量和可重用性.GNU ...

  3. O(n)时间复杂度查找数组第二大元素

    分析:要求O(n)时间复杂度,不能用排序.可以设置两个临时变量分别保存当前最大值以及当前第二大的值,然后遍历数组,不断更新最大值和第二大的数值. 代码: bool findSec(vector< ...

  4. python 一些特殊用法和坑

    https://github.com/leisurelicht/wtfpython-cn

  5. MDK中问题:warning : type qualifier is meaningless on cast type return 的解决

    在MDK编译代码时,有时会出现这样的警告, warning : type qualifier is meaningless on cast type return 在MDK中,作如下设置: 即添加 : ...

  6. SOA(面向服务的体系结构)

    SOA(面向服务的体系结构) 面向服务的体系结构是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务 ...

  7. Java 并发之原子性与可见性

    原子性 原子是世界上的最小单位,具有不可分割性.比如 a=0:(a非long和double类型) 这个操作是不可分割的,那么我们说这个操作时原子操作.再比如:a++: 这个操作实际是a = a + 1 ...

  8. 数据整理A

  9. DNF邀请码开发再开发方案需求

    一.原因分析:   1.现实原因:主播粉丝量级有限,一定规模粉丝注册消耗完后无法进 行之后合作 2.主播资源有限,能合作主播数量少   3.直播粉丝真实接近核心用户,但是不能将其有效转化为平台流水   ...

  10. pymysql连接mysql报错

    pymysql模块操作数据库及连接报错解决方法   import pymysql sql = "select host,user,password from user" #想要执行 ...