字符串

 一、基础操作

1、拼接
“+”
2、计算长度
len(s)
/*
数字,英文,小数点、下划线、空格占一个字节
汉字占2-4个字节(GBK-2)(UTF-8-3/4)
*/
3、截取
s[st:ed:step]
4、分割、合并字符串
s.split(分割符,分割次数)//如果没有指定分隔符,也不能指定分割次数
s1=分隔符.join(iterable)
/*
将多个字符串采用固定的分隔符连接在一起
iterable表示可迭代对象
第一个迭代元素前不加分隔符
*/
5、检索
s.count(sub[st,ed])//一个字符串在另一个字符串中出现的次数
s.find(sub[st,ed])//子字符串在字符串中首次出现的位置,不存在的识货返回-1
s.index(sub[st,ed])//找位置,不存在抛出异常
s.startwith(pre[st,ed])//字符串是否以指定字符串开头
s.endwith(suf[st,ed])//字符串是否以指定字符串结尾
6、大小写转换
s.lower()
s.upper()
7、去空格和特殊字符
s.strip(chars)//去掉字符串左右两侧的空格和特殊字符
s.lstrip(chars)//去掉字符串左侧的空格和特殊自促
s.rstrip(chars)//去掉字符串右侧的空格和字符串
8、格式化
方式一:‘%[-][+][0][m][.n]格式化字符串’%exp
/*
- 左对齐,正数前方无符号,负数前面加负号
+ 右对齐,正数前方加正号,负数前方加负号
0 右对齐,正数前方无符号,负数前方加负号
m 占有宽度
.n 表示在小数点后保留的位数
格式化字符串 %s,%c,%d,%x,%f,%r,%o,%e,%E,%%
exp 要转换的项
*/

方式二:s.format(args)
/*
s即模板—{[index] [ : {[[fill]align] [sign] [#] [width][.precision][type]}
args表示要转换的项
*/

 二、编码转换

  • ASCII码

    仅对10个数字、26个大写英文字母、26个小写英文字母、一些其他符号进行了编码。最多只能表示256个符号,每个字符占一个字节
    
  • GBK编码

    是我国制定的中文编码标准。规定英文字母占1个字节,中文字符占2个字节
    
  • UTF-8

    国际通用的编码,对全世界所有国家使用的字符都进行了编码。英文字符占1个字节,中文占3个字节
    Python3.x中,默认采用UTF-8,有效解决了中文乱码的问题
    
  • 字符串类型

    • str—表示Unicode字符(ASCII或者其他),一个字符对应若干个字节
    • bytes—表示二进制数据
    • str类型和bytes类型之间可以通过encode()和decoed()方法进行转换,这两个方法是互逆的过程
  • //这两个方法都不会改变原值,需要定义一个类型去接收
    //encoding指定转码的方式
    str.encode([encoding='utf-8'][,errors="strict"])//将字符串转换为二进制数据,str对象的方法,俗称“编码”
    bytes.decode([encoding='utf-8'][errors="strict"])//将二进制数据转换为字符串,bytes对象的方法,俗称“解码”
    /*
    eg:
    str="是你呀",encoding='UTF-8'
    bytes=b'\xe6\x98\xaf\xe4\xbd\xa0\xe5\x91\x80'
    解码和编码转换时,采用的转码方式要一致
    */
    

 三、正则表达式

  • 查找符合某些规则的字符串

  • 元字符(这是用来匹配单个字符的呦)

    //使用方法——
    ^s1 //s是否是以字符串s1开头——这是行定位符,不是元字符,用来匹配字符串的
    s1$ //s是否是以字符串s1结尾——行定位符,不是元字符,用来匹配字符串
    s1 //s中是否包含子串s1——匹配字符串的
    //以下才是元字符
    .  //匹配除换行符以外的任意字符——“x\ny”,可匹配字符x、y
    \w //匹配字母、数字、下划线或汉字——"x\n_1",可匹配字符x、_、1
    \W //匹配除字母、数字、下划线或汉字以外的字符——“x\n_1”,可匹配字符\n
    \s //匹配单个的空白符——“x\n\t 1”,可匹配字符\n、 、\t
    \S //匹配除单个空白符以外的所有字符——“x\n\t 1”,可匹配字符x、1
    \b //匹配单词的开始或结束——“i like pyhton ”,\bp与的单词python匹配
    \d //匹配数字——“x\n_1”,\d可以与字符1匹配
    {} //在正则表达式
    
  • 限定符(这个就是用来匹配单个字符在限定符之前出现的次数)

    //使用方法——单个字符+限定符
    ? //0或1次
    + //1或多次
    * //0或多次
    {n} //n次
    {n,} //最少n次
    {n,m} //最少n次,最多m次
    
    eg:
    go{2,}gle,该表达式可以匹配的范围从google到goo...gle
    
  • 字符类

    • 元字符中匹配的字符集合(比如:数字就是0-9)都是已存在的,明文规定的,字符类就是你自己定义匹配集合的范围,比如,元音字母[aoeiu]

    • 排除字符(匹配不符合指定集合的字符串)

      实现方式——[]
      [^a-zA-Z]  //该表达式用于匹配一个不是字母的字符
      
    • 选择字符(匹配有条件选择的字符串)

      实现方式——|
      (^\d{15}$)|(^\d{18}$)|(^\d{17})(\d|X|x)$  //该表达式用于匹配身份证号的两种情况,要么是15的数字,要么是18位的(前17位是数字,最后一位可以是数字,也可以是X或x)
      
    • 转义字符(将特殊字符变为普通字符)

      实现方式——\
      [1-9]{1,3}\. [0-9]{1,3}\. [0-9]{1,3}\. [0-9]{1,3}  //该表达式用于匹配IP地址,如127.0.0.1
      
    • 分组(将要匹配的字符串分组,分组匹配)

      实现方式——()
      (six|four)th  //匹配单词sixth或fourth
      
  • 正则表达式在python中的用途

    • 用作模式字符串

 四、正则表达式的应用—re模块

  • Python提供了re模块,用于实现正则表达式的操作

    import re	//必须导入这个模块
    /*
    re模块提供的方法
    search()
    match()
    findall()
    */
    
    1、匹配
    re.match(模式字符串s1,要匹配的字符串s2,[标志位])
    //用于从字符串的开始处进行匹配(s2中的匹配元组必须和s1一样),如果在起始位置匹配成功,立即返回match对象,不再扫描后面的字符串,否则返回None
    re.search(模式字符串s1,要匹配的字符串s2,[标志位])
    //在整个字符串中搜索第一个匹配的值(s2中的匹配元组只要包含s1即可)
    re.findall(模式字符串是,要匹配的字符串s2,[标志位])
    //在整个字符串中搜索所有符合正则表达式的字符串、
    
    //加** **以说明重点
    
    /*
    标志位说明如下:
    A——对于元字符只进行ASCII匹配
    I——不区分字母大小写的匹配
    M——字符串每一行末尾每一行添加^和$
    S——匹配所有字符
    X——忽略未转义的空格和注释
    */
    
    
    /*
    eg:
    import re
    s1=**r**'mr_\w+'
    s2='MR_SHOP mr_shop'
    s3='项目MR_SHOP mr_shop'
    match1=re.**match**(s1,s2,re.I)
    match2=re.**match**(s1,s3,re.I)
    match3=re.**search**(s1,s3,re.I)
    match4=re.**finall**(s1,s3,re.I)
    print(match1)   //<re.Match object; span=(0, 7), match='MR_SHOP'>
    print(match2)	//None
    print(match3)	//<re.Match object; span=(4, 11), match='MR_SHOP'>
    print(match4)	//['MR_SHOP','mr_shop']
    print(match1.start()) //匹配的起始位置——0
    print(match1.end())    //匹配的结束位置——7
    print(match,span())		//匹配位置的元组——(0,7)
    print(match.string)		//匹配的字符串——MR_SHOP mr_shop
    print(match.group()) 	//匹配的数据——MR_SHOP
    */
    
    2、替换
    re.sub(模式字符串s1,替换字符串s2,被替换的原始字符串s3,替换的最大次数,标志位(同上))
    //实现字符串的替换
    
    /*
    import re
    s1=r'1[34578]\d{9}'
    s2='号码:84978981 电话为136111111'
    result=re.sub(s1,'1xxxx',s2)
    print(result)	//'号码:84978981 电话为1xxxx'
    */
    
    3、分割
    re.split(模式字符串s1,要匹配的字符串s2,[最大的拆分次数],[标志位])
    //根据正则表达式分隔字符串,并以列表形式返回
    
    /*
    import re
    s1 =r'[?|$]'
    s2='python&java?C'
    result=re.split(s1,s2)
    print(result)	//['Python','Java','C']
    */
    

 emo~