zoukankan      html  css  js  c++  java
  • 多测师讲解pthon_re模块_高级讲师肖sir

    #import re
     
    一、我们就re模块(也叫正则模块)介绍:
    实现一个编译查找,一般在日志处理或者文件处理时用的比较多
    正则表达式主要用于模式匹配和替换工作。
     
     
    预定义字符集匹配:
    d:数字0-9
    D:非数字
    s:空白字符
    :换行符
    :回车符
    re模块数量词匹配:
    符号^:表示的匹配字符以什么开头
    符号$:表示的匹配字符以什么结尾
    符号*:匹配*前面的字符0次或n次
    eg:ab* 能匹配a 匹配ab 匹配abb
    符号+:匹配+前面的字符1次或n次
    符号?:匹配?前面的字符0次或1次
    符号{m}:匹配前一个字符m次
    符号{m,n}:匹配前一个字符m到n次(包括n次),m或n可以省略,mn都是
    正整数
    1、match (读音:马区,意思:匹配)
    从第一个字符开始匹配,如果第一个字符不是要匹配的类型、则匹配失败并报错
    注意:如果规则带了'+',则匹配1次或者多次,无'+'只匹配一次
    2、search(读音:色区 ,意思:搜索)
    从第一个字符开始查找、一找到就返回第一个字符串,找到就不往下找,找不到则报错
    3、findall (意思:查找所有匹配结果)
    从第一个字符开始查找,找到全部相关匹配为止,找不到返回一个列表[]
    4、compile(读音:肯排偶 意思:编译)
    编译模式生成对象,找到全部相关匹配为止,找不到返回一个列表[]
    1、match方法
    match 方法用于从字符串的头部开始匹配,仅返回第一个匹配的结果~
    pattern.match(string[, pos[, endpos]]) 或 re.match(pattern, string[, flags])
    pattern.match(string[, pos[, endpos]]) 中的 pos,endpos指定字符串匹配的起始和终止位置,这两个均为可选参数,若不指定,默认从字符串的开头开始匹配~
     
    # a="2233113abf123"
    #匹配当前字符串中的:d规则 整数 1个整数 ,匹配到后则不贪婪,如果匹配第一个值不少d 的格则抛异常
    # yy=re.match("d",a)
    # print (yy.group())
    #打印结果:2
     
    # #带+ 和不带+号的区别:不带+号则值匹配一个或一次,
    # #带+号则匹配1词或多次
    # y1=re.match( 'd+',a)
    # print (y1.group())
    # c="a123asdf12" #注意不能以字母开头
    # y=re.match('d',c)
    # print(y.group())
    #运行结果:有问题 AttributeError: 'NoneType' object has no attribute 'group'
    import re
    #re.match 从字符串的起始位置开始匹配,如果起始位置匹配不成功的话,match()就返回none
    #a="2233113abf123"
    #yy=re.match(' ,a')
    #print(yy.group())
     
    # 打印结果:TypeError: match() missing 1 required positional argument: 'string'
    #意思是:TypeError: match()缺少1个必需的位置参数:'string'
    #大写的D:匹配非数字
    # c="@@##!!abc123sad"
    # y=re.match("D{4}","c")
    #print(y.group()) #报错了
     
    #
    # y1=re.match("D{3,10}","c")
    # print(y1.group())
     
    # y1=re.match('D+',c)
    # print(y1.group()) #打印结果显示:@@##!!abc
     
     
     
    2、compile方法
    re.compile(pattern[, flag])
    步骤: 1)使用 re.compile 方法(传入正则表达式)得到 Pattern 对象 2)通过 Pattern 对象提供的方法对字符串进行匹配查找,返回一个 Match 对象(包含了匹配结果) 3)使用 Match 对象提供的方法获取匹配结果
     
    示例:
    import re pattern = re.compile(r'd+') # 返回一个 Pattern 对象 m = pattern.match('123abc456') # 返回一个 Match 对象 print(m.group()) # 输出匹配结果:123
    示例中的 compile 方法用于编译正则表达式,返回一个 Pattern 对象,可利用 Pattern 对象中的一系列方法对字符串进行匹配查找。Pattern 对象中的常用方法包括:match,search,findall,finditer,split,sub,subn。当然这些方法也可以使用 re模块直接调用# 输出匹配的完整字符串 print(m.group()) # 123abc456 # 同上,输出匹配的完整字符串 print(m.group(0)) # 123abc456 # 从匹配的字符串中获取第一个分组 print(m.group(1)) # 123 # 从匹配的字符串中获取第二个分组 print(m.group(2)) # abc # 从匹配的字符串中获取第三个分组 print(m.group(3)) # 456 # 从匹配的字符串中获取所有分组,返回为元组 print(m.groups()) # ('123', 'abc', '456') # 获取第二个分组 在字符串中的起始位置(分组第一个字符的索引),start方法的默认参数为0,即字符串的起始索引 print(m.start(2)) # 3 # 获取第二个分组 在字符串中的起始位置(分组最后一个字符的索引+1),通start方法,end方法的默认参数也为0,即字符串结尾的索引+1 print(m.end(2)) # 6 # 第三个分组的起始和结束位置,即 (start(3), end(3)) print(m.span(3)) # (6, 9) # 同 (start(), end()) print(m.span()) # (0, 9)
     
     
     
    # import re
    # a="1!2!3!4asdf567"
    # # yy =re.findall("d",a)
    # # print(yy)
    # # #打印结果:['1', '2', '3', '4', '5', '6', '7']
    # # y1 =re.findall("d+",a)
    # # print (y1)
    # # #打印结果:['1', '2', '3', '4', '567']
    # y2=re.findall("D" ,a)
    # print(y2) #打印结果:['!', '!', '!', 'a', 's', 'd', 'f']
    # y3=re.findall('D+',a)
    # print(y3)#打印结果:['!', '!', '!', 'asdf']
    # y4=re.findall('+{2}',a)
    # print(y4)#打印结果: []
    # y5=re.findall('d{1,4}',a)
    # print (y5) #打印结果:['1', '2', '3', '4', '567']
     
     
    import re
    yy =re.compile('d') #['1', '2', '3', '4', '5', '6', '7']
    y1 =re.compile('d+') #['1', '2', '3', '4', '567']
    y2 =re.compile('D') #['!', '!', '!', 'a', 's', 'd', 'f']
    y3 =re.compile('D+') #['!', '!', '!', 'asdf']
    #
     
    3、findall 方法
    match方法 和search方法 仅会返回一个结果,findall方法会将字符串中的所有匹配结果以列表的形式返回,注意,返回的是列表,不是 Match 对象~
    indall(string[, pos[, endpos]]) # 可选参数 pos,endpos 用于指定查找的起始位置和结束位置,默认 pos 为0,endpos为字符串长度
     
     
    all=yy.findall('1!2!3!4asdf567')
    print(all) #['1', '2', '3', '4', '5', '6', '7']
    a1=y1.findall('sdafdsa')
    print(a1) #[]
    a2=y2.findall('123456sdafdsa123456')
    print (a2) #打印结果:['s', 'd', 'a', 'f', 'd', 's', 'a']
    a3=y3.findall('123safds123')
    print(a3) #打印结果:['safds']
    c="nihaohello,henhaohello"
    y3=re.compile('hello')
    a=y3.findall(c)
    print (a) #显示结果['hello', 'hello']
    pattern = re.compile(r'[a-z]+')
    res = pattern.findall('123abc456cde')
    print(res)
     
    2、search 方法 ( 读音:色区 ,意思:搜索,寻找商品)
    不同于match方法的从头开始匹配,search方法用于在字符串中的进行查找(从左向右进行查找),只要找到一个匹配结果,就返回 Match 对象,若没有则返回None~
    search(string[, pos[, endpos]]) # 可选参数 pos,endpos 用于指定查找的起始位置和结束位置,默认 pos 为0,endpos为字符串长度
     
     
     
    4、
     
    pattern = re.compile('([0-9]*)([a-z]*)([0-9]*)') m = pattern.match('123abc456')

  • 相关阅读:
    spring的@Transactional注解详细用法
    java中线程池的使用方法
    Java中多线程使用匿名内部类的方式进行创建3种方式
    RISC-V指令集的诞生,"V"也表示变化(variation)和向量(vectors)
    雷军致全员公开信:明天,让我们一起见证伟大时刻!(估值543亿美元,中国的山寨机已被彻底消灭,通过生态链产品改变了100多个行业,全面推动了商业效率的提升,上市仅仅是小米新的开始)
    C语言利用 void 类型指针实现面向对象类概念与抽象
    Google、Mozilla、Qt、LLVM 这几家的规范是明确禁用异常的
    Qt程序调试之Q_ASSERT断言(它是一个宏,接受布尔值,当其中的布尔值为真时,便什么也不做)
    ES 1.7安装ik分词elasticsearch-analysis-ik-1.2.5中文同义词实现
    Windows 64下elasticsearch-1.7.1集群 安装、启动、停止
  • 原文地址:https://www.cnblogs.com/xiaolehua/p/13702215.html
Copyright © 2011-2022 走看看