美文网首页
【Python】-002-变量类型-字符串

【Python】-002-变量类型-字符串

作者: 9756a8680596 | 来源:发表于2017-07-11 23:47 被阅读25次

    字符串基本操作

    • 运算符:+ \ *
      a = 'mac'
      b = 'book'
      c = a + b //'macbook'
      d = a * 2 //'macmac'
    • 切片,索引
      text = 'c++ python3 python2 perl ruby lua java javascript C php5'
      text[0:10:1] //start: end: step 'c++ python'
      text[0] //'c'
    • 常用方法:
      text.split(' ') //返回列表list,根据split里面的字符将字符串分割为字符串列表
      '*'.join(a) //返回字符串,根据join前面的字符,将数组a链接为字符串
      text.upper() //返回新字符串,将text里面的字母都进行大写
      text.find('as') //返回首次匹配到的索引值,不存在返回-1
      text.replace('python', 'HHH') //返回新字符串,原字符串不变
      ' aBC '.strip() //返回新字符串,去除单词首尾空格
      print '%s is good.'%(text[4:11])

    字符串转义

    • 转义r' ',r表示原始字符

    • " ",可以包含里面的单引号,并正常显示

    • Unicode编码字符集,支持多种字符和语言,常用UTF-8编码方式
      s = '用python做些事'
      a = u'用python做些事' //表示采用Unicode字符集,编码方式UTF-8

      s  //'\xe7\x94\xa8python\xe5\x81\x9a\xe4\xba\x9b\xe4\xba\x8b'
      a  //u'\u7528python\u505a\u4e9b\u4e8b'
      
      print s  //用python做些事
      print a  //用python做些事
      
      len(s)  //18
      len(a)  //10
      
    • 在字符串使用中文时,建议采用类似变量a的声明方式,使用Unicode编码

    • 在python用到中文,需要在头部增加#coding: utf-8

    re模块

    常用方法

    • 对字符串进行操作,文本解析工具,常用方法:
      import re
      re.match(p, text) //match()函数只在字符串开始位置尝试匹配正则表达式,返回MatchObject 的实例,匹配失败返回None
      re.search(p, text) //search() 函数是扫描整个字符串来查找匹配,返回MatchObject 的实例,匹配失败返回None
      re.findall(p, text) //在字符串中找到正则表达式所匹配的所有子串,并组成一个 列表 返回
      re.split(p, text) //将字符串匹配正则表达式的部分割开,并返回一个列表
      re.sub(p, s, text) //字符串 text 中找到匹配正则表达式 p 的所有子串,用另一个字符串 s 进行替换,返回?
      //把正则表达式的模式和标识转化成正则表达式对象,供 match() 和 search() 这两个函数使用。
      pattern = re.compile(p)
      results = pattern.match(text)

    Python正则表达式语法

    1. ^ / $ / .
    • 从头开始匹配:^
      re.findall(r'c^', text).group() // 'c'
    • 匹配特定结尾:$
      re.findall(r'c$', text) //[]
    • 表示任意一个字符:.
      re.findall(r'^c..', text) //'c++'
    1. + / * / ? / [] / |
    • 把前面的字符重复1-无穷次匹配:+
      re.findall(r'p+', text) //匹配p, pp, ppp, pppp……

    • 把前面的字符重复0-无穷次匹配:*
      re.findall(r'p*', text) //

    • 把前面的字符重复0-1次匹配:?
      re.findall(r'p?', text) //

    • 字符集匹配:[], [a-zA-Z0-9] 匹配所有字母和数字,[^6] 表示除了 6 以外的任意字符
      re.findall(r'p[a-z]', text) //['py', 'py', 'pe', 'pt', 'ph']
      re.findall(r'p[^a-z]', text) //['p5']
      re.findall(r'p[0-9]+|j[0-9]', text)

    • 对于前一个字符重复 m 到 n 次:{m, n}
      re.findall(r'p[a-z]{3,}', text) //['python', 'python', 'perl']

    • 只匹配其中一个表达式:|
      re.findall(r'p+[a-zA-Z]|j+[a-zA-Z]', text)

    1. 特殊表达式
    • 匹配任意数字和字母,相当于[a-zA-Z0-9_] : \w\W表示非
    • 匹配任意十进制数,相当于[0-9]\d\D表示非
    • 匹配任意空白字符,相当于[\t\n\r\f\v]\s\S表示非
      re.findall(r'p\w+',text) //re.findall(r'p[0-9a-zA-Z]+',text)
      re.findall(r'p\w+\d',text) //p开头,第二位是字母或者数字,最后一位是数字
    • 贪婪模式和非贪婪模式,+ | * / ? | *?,贪婪模式为尽可能多的匹配,非贪婪模式只匹配一次
      re.findall(r'p[a-z]+', text)
      re.findall(r'p[a-z]+?', text)
      re.findall(r'p[a-z]', text)
      re.findall(r'p[a-z]
      ?', text)

    参考资料
    1. 使用 Python 模块 re 实现解析小工具

    相关文章

      网友评论

          本文标题:【Python】-002-变量类型-字符串

          本文链接:https://www.haomeiwen.com/subject/qkzchxtx.html