字符串编码
- encode()和decode()方法
- bytes()和str() 函数
#默认为str类型 s='我' #转为bytes类型 s1=s.encode('gbk') s2=bytes(s,encoding='gbk') #转为str类型 s3=s1.decode('gbk') s4=str(s1,encoding='gbk') #'gbk'可以换为'utf-8'
采用
UTF-8
解析源程序,
无论是数字字符、英文字母、汉字都按一个
字符来对待和处理,长度都为1
字符串构建
- str()函数
- 引号
- 保留原字符串
- 转义字符 ‘\’ : \'' ,\\
- 字符串前加上r/R : print(r"c:\test\net") ?????
- 三重引号 : ' ' '
字符串格式化
(1)
' % ... 格式字符' %x
...的内容可以为:
- + # 0 m .n 左对齐,如果前面有空格或0,则丢弃空格与0 正数前加+号 以某进制输出结果中加上0b,0x,0o 如果宽度不够,且指定0,则以0填充,如果时左对齐,则以空格放后面填充 最小宽度,不够前面补空格 指定精度,四舍五入 多对象
'%.2f,%4d,%s'%(3.456727,89,'Lily') #常量-->元组
name='Lily' age=18 '我叫%s,今年%d岁'%(name,age) #变量-->元组
格式字符
%d/ %i , %c , %s, %F/%f ,%u(无符号整数),%o(8进制), %x(16进制),%e/%E(科学计数,以e或者E为基底)
%g/%G
(2)
format()方法
' { ... } '.format(x)
...的内容可以为:
: align sign # 0(也可以用其他符号) m , _ .n 格式字符 要进行的操作 < 左对齐
> 右对齐
^ 居中对齐
= 仅对数字有效,将0填充
在数字与符号之间
+ 所有数字都带符号
- 负数带
空格 正数带空格,负数带符号
每三位添加逗号或者下划线分隔 默认为s,不用% { }与format里面的值一一对应,可用{1},{2}来特指
'我叫{0},今年{1}岁'.format('张清',18)
列表用*解包,或者索引调用
my=['张清',18] '我叫{},今年{}岁'.format(*my) #列表用*,自动解包 '我叫{0[0]},今年{0[1]}岁'.format(my) #列表不用*,则需要用列表的索引元素
在format里定义变量,调用时可直接使用变量名
'我叫{name},今年{age}岁'.format(name='张清',age=18)
字典用**解包
my={'name':'张清','age':18} '我叫{name},今年{age}岁'.format(**my) #字典用**,自动解包
以*填充,注意位置(???????)
'{0:*>10}'.format(18) #右对齐
(3)
带f的格式化
name='张清' age=18 f'我叫{name},今年{age}岁'
字符串截取
使用索引或者切片,也可使用负数索引,从-1开始,不支持更改,是不可变对象
内置函数
- len()
- ord(): 转为unicode(从字符转为数字)
- chr() :转回来
- max()
- min()
字符串常用方法
:字符串为不可变,所以方法最终返回新字符串,不改变原有
- center(width, fillchar) 居中对齐 // fillchar为填充字符,默认为空格,返回新字符串
- ljust(width, fillchar) 左对齐
- rjust(width, fillchar) 右对齐
- lower() 大写转小写,其他字符不变,返回新字符串
- upper()
- capitalize(): 将
整个字符串
首字母转换为大写形式,其他字母转换为小写形式,返回新字符串- title(): 将每个
单词
的首字母转换为大写形式,其他部分的字母转换为小写形式。- swapcase():将
大小写互换
。- islower() 字符串是否为全小写 (只检查字母,其他字符不检查) ,返回true或false
- isupper() 字符串是否为全大写
- isdigit() 字符串是否为全数字(只允许包含数字,其他字符也要检查)
- find(sub,start, end) [start,end)范围内查找子串sub,返回首次出现的位置索引,
没有找到
则返回-1- rfind(sub, start ,end) 从右往左
- index() , rindex(): 用法于find一样,但找不到会报错,而非返回-1、
- count(sub, start, end) 在字符串S中,查找并返回[start,end)范围内子串sub出现的
次数
,不存在
,则返回0。- split(分隔符,maxsplit=...) 以指定字符从左往右将字符串分割开来,分割后的结果以
列表
返回,默认为空白符,可指定分隔次数- rsplit()
- '连接符'. join(对象) 连接序列元素,返回字符串,如果是元素本身是字符串,则舍去引号
- replace(old,new,count=-1) 查找字符串中old子串并用new子串来替换。参数count默认值为-1,表示替换
所有
匹配项,最多替换count
次,返回替换后的新字符串(原字符串不变)。- ' '.maketrans( 'a' , 'b' ):生成字符映射表, a与b映射
- translate(映射表):根据字符映射表替换字符。这两种方法联合起来使用可以一次替换多个字符
- strip( 指定字符):去除字符串两侧的
空白字符(默认)
或指定字符
,并返回新字符串。s1='HHwHeart is liwving iHn tomorrowHww' s1.strip('Hw') #从两端逐一去除“H”或“w”字符,直到不是这两个字符为止(中间的字符Hw不能去除)
字符串模块
import string
- string.capwords(s) 与title函数作用一样
string.ascii_lowercase 字符串常量小写('a'~'z')
string.ascii_uppercase 字符串常量大写
random.choice (string.ascii_lowercase):从小写字母中随机选择,choice()方法的功能是在一个非空的序列中随机选择一个元素。
正则表达式
(1)python中的re模块
- import re
- re.
findall(模式串w,主串s)
:以列表的形式返回所有能匹配的模式串w,如果没有找到匹配的,则返回空列表(2)元字符
字符串前加r,避免转义字符
‘ . ’ 表任意单个字符(除换行符以外)
- [ ]
1. 指定字符集,从字符集中选出一个字符 [abc] [a-z] [0-9] 2. ^在[]内表示补集,[^3]表除3以外的元素 3. 有些元字符在[]内不起作用,例如$和.
- ^:匹配
行首
,匹配每行中以^后面的字符开头的字符串(必须放在模式串的开头),是则只返回模式串- $:匹配
行尾
,匹配每行中以$之前的字符结束的字符串- \b: 放前面,匹配单词头,放后面,匹配单词尾(注意匹配的是分隔后的每个单词,返回模式串)
\B:和\b相反(不查开头/结尾的,只查其他部分的)
\d:匹配数字
\D:匹配非数字
\s:匹配空白字符
\w: 匹配任何字母、数字或下画线字符,相当于[a-z A-Z 0-9_]
\W:相反
\: 取消元字符
(3)量词(重复次数)
- *:匹配位于*之前的一个字符
0次
或多次
出现- +:匹配位于+之前的一个字符
1次
或多次出现
- ?:匹配位于?之前的一个字符的
0次
或1次
出现- {m,n}:表示至少有m个重复,至多有n个重复,n不写默认为无穷多次,{n}确定重复n次
- 默认的“
贪心的
”模式:匹配搜索到的、尽可能长的字符串- 设置为“
非贪心的
”模式:匹配搜索到尽可能短的字符串- 当“?”紧随其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,将匹配模式设置为“
非贪心的
”。- 如:"*?" 重复任意次,但尽可能少重复
- | 或 例如:'z|food' 能匹配 "z" 或 "food"
- (w):匹配 w 并获取返回这一匹配,通常与|连用
- (? : w)匹配w,但不返回
'industr(?:y|ies)' 匹配到yes或ies但不立刻返回,而是与前面的字符统一匹配返回 如果没有?:,则直接返回yes或者ies