字符串与正则表达式

一.字符串

  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"))

    

    

   

原文地址:https://www.cnblogs.com/pipile/p/11898772.html