Python3 From Zero——{最初的意识:002~字符串和文本}
一、使用多个界定符分割字符串
字符串.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~字符串和文本}的更多相关文章
- Python3 From Zero——{最初的意识:000~Initial consciousness}
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 a.编码 默认情况下,Python ...
- Python3 From Zero——{最初的意识:008~初级实例演练}
一.构显国际橡棋8x8棋盘 #!/usr/bin/env python3 #-*- coding:utf-8 -*- color_0="\033[41m \033[00m" col ...
- Python3 From Zero——{最初的意识:006~数据编码与处理}
一.读写CSV数据: #!/usr/bin/env python3 #-*- coding=utf8 -*- import csv with open('kxtx.csv', 'rt') as f: ...
- Python3 From Zero——{最初的意识:001~数据结构和算法}
一.从队列两端高效插入.删除元素,及保留固定数量的数据条目: collections.deque([iterable[,maxlen=N]]) a = collections.deque([1, 2] ...
- Python3 From Zero——{最初的意识:007~函数}
一.编写可接受任意数量参数的函数:*.** >>> def test(x, *args, y, **kwargs): ... pass ... >>> test(1 ...
- Python3 From Zero——{最初的意识:005~文件和I/O}
一.输出重定向到文件 >>> with open('/home/f/py_script/passwd', 'rt+') as f1: ... print('Hello Dog!', ...
- Python3 From Zero——{最初的意识:004~迭代器和生成器}
一.反向迭代:reversed() >>> a [1, 2, 3, 4] >>> for x in reversed(a): ... print(x, end=' ...
- Python3 From Zero——{最初的意识:003~数字、日期、时间}
一.对数值进行取整:round(value,ndigits) >>> round(15.5,-1) #可以取负数 20.0 >>> round(15.5,0) #当 ...
- [转]python3字符串与文本处理
转自:python3字符串与文本处理 阅读目录 1.针对任意多的分隔符拆分字符串 2.在字符串的开头或结尾处做文本匹配 3.利用shell通配符做字符串匹配 4.文本模式的匹配和查找 5.查找和替换文 ...
随机推荐
- MySql中创建用户,授权
第一天搞MySql好多东西都不会,幸好有网络的强大资源,首先需要注意的是任何一条sql语句都是要以分号结尾的,不然很是蛋疼的 1.新建用户. //登录MYSQL @>mysql -u root ...
- iOS 7 认识 TextKit
本文由 伯乐在线 - 和谐老约翰 翻译自 Max Seelemann.欢迎加入技术翻译小组.转载请参见文章末尾处的要求. iOS7 的发布给开发者的案头带来了很多新工具.其中一个就是 TextKit( ...
- C++中调用OC代码
前言 最近项目中为了方便维护,底层统一使用C++编写.由于是项目是做屏幕共享sdk,所以只能底层的压缩.编解码使用C++,屏幕捕获部分Mac和win就自己实现了.那么问题就来了,因为是面向接口编程,所 ...
- 修改 Chrome浏览器主页被劫持 chrome 主页被篡改成hao.qquu8.com的解决方案
1. 开始菜单输入‘g'找到 Google Chrome浏览器 2. 修改属性->目标,将 chrome.exe hao.qquu8.com 后面的网址去掉,如图:
- k8s 资源管理
对应到Kubernetes的Pod容器上,就是下面这4个参数:◎ spec.container[].resources.requests.cpu:◎ spec.container[].resource ...
- npm和cnpm的安装(window)
一:安装node.js 1.进入https://nodejs.org/en/中下载自己电脑相对应的node.js. 2.将下载下来的node.js进行安装. 3.利用管理员身份打开cmd,在里面输入n ...
- jenkins集成sonar代码审核工具
在项目测试管理过程中,项目上线很多时候时间仓促,导致代码质量不高,测试时间不充分会导致线上出现各种各样的问题,这个时候一方面是增加测试的质量把控,还要从根本上解决开发小哥的代码质量问题.而Sonar这 ...
- [已解决]Series object has no attribute explode
报错代码 s = pd.Series([[1, 2, 3], 'foo', [], [3, 4]]) s 0 [1, 2, 3] 1 foo 2 [] 3 [3, 4] dtype: object s ...
- C# WinForm 第一个项目控件使用心得
1.控件心得 1.1 基础控件 panel 作用:布局 难点:重绘边框改变颜色 重绘panel里如果有fill填充控件 panle的padding要改个值 private void pnlPaintB ...
- LBP算子
LBP算子特点 LBP(Local Binary Pattern),即局部二值模式,属于一种图像预处理算法,具有光照不变性和旋转不变性. 我目前做的项目是人脸表情识别,采用这种算法可以减少光照和人脸旋 ...