python正则表达式

  1. 常用正则表达式
    . :匹配任意一个字符
    ^ :匹配以什么开头的字符,如果放在中括号中表示取反,如 ^abc 表示匹配以 abc 开头的字符,[^abc] 表示匹配 abc 之外的字符
    :匹配以什么结尾的字符*:匹配零个或多个星号前面的字符,如可以匹配、、、等等如可以匹配、、、等等,如abc?只能匹配ab、abc :用于转义,比如我要匹配 这个字符,但是用于匹配以什么结尾的字符,因此我就可以用来匹配用于匹配以什么结尾的字符,因此我就可以用$来匹配 这个字符
    | :表示'或者',比如 ab|cd 可以匹配 'ab' 或 'cd'
    {} :匹配指定个花括号前面的字符,如 ab{2} 可以匹配 abb ,也可以是一个范围,如 ab{1,4} 可以匹配 ab 、abb 、abbb 、abbbb
    [] :匹配中括号中的任意一个字符,如 [0-9] 表示匹配 0~9 中的任意一个数字
    () :如果用括号括起来表示一个整体,如 (ab){2} 把 ab 当成一个整体,只能匹配 abab ,另外还有(?P<name>....) 的形式,我们
           知道用括号括起来的表示一个整体,比如 (abcdefg) 是一个整体,但如果括号里面的内容很长很长,那么我们访问这个整体的时候
           是通过给这个整体取个别名的方式,即 (?P<name>....) 的方式,如 (?P<a>(abcdefg)) 表示把 (abcdefg) 这个整体取个别名 a ,
           当我们访问的时候访问 a 就相当于访问 (abcdefg) ,在正则中这通常称为分组
    \d :匹配任何数字,相当于 [0-9]
    \D :匹配非数字字符,相当于 [^0-9]
    \s :匹配任何空白字符,如空格、Tab制表符、换行符等
    \S :匹配任何非空白字符
    \w :匹配所有的字母和数字,相当于 [a-zA-Z0-9]
    \W :匹配所有的非字母和数字,相当于[^a-zA-Z0-9]

  2. re正则对象和正则匹配效率比较
    re.findall() :用于从一个字符串中匹配指定的字符
    findall(string[, pos[, endpos]]) 
    搜索string,以列表形式返回全部能匹配的子串

    import re
    p1 = re.compile(r'\d+')
    a_str = 'one1two222three33four4'
    #正则对象的split方法,使用正则匹配进行分割字符串
    #最后是以列表的形式返回
    print(p1.split(a_str))
    
    #正则对象的findall方法,来查找符合对象的子字符串
    #最后是以列表的形式返回
    print(p1.findall(a_str))
    
    #finditer 每个返回值都是是一个对象,用group()方法查看,
    for i in p1.finditer(a_str):
        print(i.group())
    sub方法
    sub(repl, string[, count])
    使用repl替换string中每一个匹配的子串后返回替换后的字符串。
    当repl是一个字符串时,可以使用\id或\g<id>、\g<name>引用分组,但不能使用编号0。
    当repl是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。
    count用于指定最多替换次数,不指定时全部替换。

    import re
    p = re.compile(r'(\w+) (\w+)')
    s = 'i say,hello word!'
    print(p.sub(r'\2 \1',s))
    
    def func(m):
        return m.group(1).title() + ' ' +m.group(2).title()
    print(p.sub(func,s)
    match匹配对象
    Match对象是一次匹配的结果,包含了很多关于此次匹配的信息,可以使用Match提供的可读属性或方法来获取这些信息。上面的过程中多次使用了match对象,调用了他的group()和groups()等方法。

    import re
    prog = re.compile(r'(?P<tagname>abc)(\w*)(?P=tagname)')
    result = prog.match('abclfjlad234sjldabc')
    
    # finiter 迭代以后每个对象都是一个matche对象
    
    print(dir(result)) #查看match方法
    print(result.group()) #group方法
    print(result.groups())
    print(result.group(2))
    print(result.group(1))
    print('####'*10 + 'tagname' + '####'*10)
    print(result.group('tagname'))
    #matche对象的group返回一个元组,下标是以1开头
    
    print(result.groupdict())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值