• 字符串与正则表达式


    一.字符串

      1.格式化浮点数字

        '%f'%1.25  输出:1.250000(默认输出小数点后的6位数字)

        '%.2f'%1.25 输出:1.25  (精确到小数点后两位)

      2.字符串与日期的转换

        例:

          import time,datetime

          time.strftime("%Y-%m-%d %X",time.localtime())

          

          t=time.strptime('2018-08-08','%Y-%m-%d')

          y,m,d=t[0:3]

     3.正则表达式

      3-1:特殊字符

       ^:正则表达式的开始字符

      $:正则表达式的结束字符

      w:匹配字母,数字,下划线

      W:匹配非字母,数字,下划线的字符

      s:匹配空白字符

      S:匹配非空白字符

      d:匹配数字

      D:匹配非数字的字符

      :匹配单词的开始和结束

      B:匹配不是单词的开始和结束的位置

      . :匹配任意字符,包括汉字

      [m]:匹配单个字符串

      [m1,m2]:匹配多个字符串

      [m-n]:匹配m到n区间内的数字,字母

      [^m]:匹配除m以外的字符串

      ():对正则表达式进行分组,一对圆括号表示一组

      

      规则选项

      I:忽略大小写

      L:字符集本地化,用于多语言环境

      M:多行匹配

      S:是"."匹配" "在内的所有字符

      X:忽略正则表达式中的空白,换行,方便添加注释

      U: w,W,B,,d,D,s,S都将使用unicode

      

      3-2:常用限定符 

      *:匹配0次或多次

      +:匹配一次或多次

      ?:匹配一次或0次

      {m}:重复m次

      {m,n}:重复m到n次,其中n可以省略,表示m到任意次

      

      限定符与?号的组合

      *?:匹配0次或多次,且最短匹配

      +?:匹配一次或多次,且最短匹配

      ??:匹配一次或0次,且最短匹配

      {m,n}:重复m次,且最短匹配

      (?#...):正则表达式中的注释

      (?P<name>...):给分组命名,name表示分组的名称

      (?P=name):使用名为name的分组

        例:

        [(-]? :表示做多只能取"("或"-"其中一个

      处理正则表达式的模块:re

      re的常用函数:

      findall(pattern,string,flags=0):根据pattern在string中匹配字符串

      sub():根据指定的正则表达式,替换原字符串中的子串  (注:先创建s的拷贝,然后在拷贝中替换字符串,并不会改变s的内容)

      subn():作用和sub相同,返回一个二元的元组

      match(pattern,string,flags=0):根据pattern从string的头部开始匹配字符串,只返回第一次匹配成功的对象

      search():根据pattern在string中匹配字符串,只返回第一次匹配成功的对象

      compile():编译正则表达式pattern,返回1个Pattern对象

      split():根据pattern分隔string,maxsplit表示最大的分隔数

      escape():匹配字符串中的特殊字符,如*,+,?

      例:

        import re

        s='HELLO WORLD'

        re.findall(r'^hello',s)         #结果为:[]

        re.findall(r'^hello',s,re.I)   #re.I表示忽略大小写

        re.findall(r'w+',s)       #:结果为:['HELLO', 'WORLD']

        替换指定字符串中的子串:

        import re 

        s='hello world'

        re.sub('hello','hi',s)     #hi world

        re.sub('hello','hi',s[-4:])    #因为没有找到匹配的子串,所有输出结果为s[-4:],即orld

        tel3='(010)12345678'

        print(re.findall(r'[(]?d{3}[)-]?d{8}|[(]?d{4}[)-]?d{7}',tel3))

        正则表达式的解析非常费时,如果多次使用findall()的方式匹配字符串,搜索效率会很低,可以使用compile()进行预编译,该函数返回一个pattern对象

        pattern对象的属性和方法如下:

        pattern:获取当前使用的正则表达式

        findall(string[,start[,end]]):查找所有符合pattern对象匹配条件的结果,返回一个包含匹配结果的列表。

        finditer(string[,start[,end]]):返回一个包含匹配结果的地址

        match():用法同re.match()

        search():用法同re.search()

        

        例:

          import re

          s='1abc23def45'

          p=re.compile(r'd+')

          print(p.findall(s))

          print(p.pattern)

        函数compile()通常与match(),search(),group()一起使用,对含有分组的正则表达式进行解析。match()与search()将返回一个match()对象,

        match()对象的方法和属性:

        pos:搜索的开始位置

        endpos:搜索的结束位置

        string:搜索的字符串

        re:当前使用的正则表达式的对象

        lastindex:最后匹配的组索引

        lastgroup:最后匹配的组名

        group(index=0):某个分组的匹配结果,如果index等于0表示匹配整个正则表达式

        groups():所有分组的匹配结果,每个分组的结果组成一个列表返回

        groupdict():返回组名作为 key,每个分组的匹配结果作为value的字典

        start([group]):获取组的开始位置

        end([group]):获取组的结束位置

        span([group]):获取组的开始和结束位置

        expand(template):使用组的匹配结果来替换模板template中的内容,并把替换后的字符串返回

        例:

          import re

          p=re.compile(r'(abc)1')

                    m=p.match('abcabcabc')

          print(m.group(0),m.group(1),m.group())

          p=re.compile(r"(?P<one>abc)(?P=one)")

          m=p.search("abcabcabc")    

          print(m.group("one"))

        

        

       

  • 相关阅读:
    Easyui datagrid 修改分页组件的分页提示信息为中文
    Easyui datagrid 实现表格记录拖拽
    Java:内部类
    算法导论:Trie字典树
    算法导论:找零钱问题
    lintcode:组成最大的数
    lintcode:验证二叉查找树
    lintcode:将二叉查找树转换成双链表
    lintcode:二叉树的路径和
    lintcode:字符串置换
  • 原文地址:https://www.cnblogs.com/pipile/p/11898772.html
Copyright © 2020-2023  润新知