zoukankan      html  css  js  c++  java
  • py 的 第 17 天

    import  re        这个re就是下面的英文单词,不过不用打出来,打re就行了,下面默认re就是读取正式表达式,regex翻译过来就是正。。。。

    永远不要起一个py文件的名字    这个名字和你一致的模块同名

    regex

    查找

    findall:匹配所有 每一项都是列表中的一个元素

    ret=re.findall('d+','xxxxxxxxxxxxx')正则表达式,带匹配的字符串,flag,把一个数字组是一组打出来

    ret=re.findall('d','xxxxxxxxxxxxxxx')正则表达式,带匹配的字符串,flag,每一个数字单独打出来

    print(ret)

    search:只匹配从左到右的第一个,得到的不是直接的结果,而是一个变量,通过这个变量的group方法来获取结果

    如果没有匹配到,会返回None,使用group会报错

    ret=re.search('d+','xxxxxxxxxxxxx')

    pritn(ret)    内存地址,这是一个正则匹配的结果

    print(ret.group())  这样才通过ret.group()获取真正的结果    但是只会获取第一个数字串

    ret=re.search('d','无数字的字符串‘)

    print(ret)      这个打印的是None  没有地址

    print(ret.group())       这个就是直接报错了

    ret=re.search('d+','字符串‘)

    if ret :    #内存地址,这是一个正则匹配的结果

      print(ret.group())   通过ret.group()获取真正的结果

    match 从头开始匹配,相当于search中的正则表达式加上一个^

    ret=re.match('d$','字符串')

    print(ret)       这个是个坑 默认要求一个^ 带一个$就是只取数字了,字符串不是纯数字就None,报错

    字符串处理的扩展:替换  切割

    split

    s='alex83taibai40egon25'

    ret=re.split('d+',s)      这个s必须在最后,否则就是打印d那些了

    print(ret)

    sub      把xx换成xx   字符串   ,后面可以有数字,没有就是满足条件的都来,

    ret=re.sub('d+','h',‘字符串’)     把这个字符串里的数字(组)都换成h  没有加号就是每个数字

    ret=re.sub('d+',h,'字符串',1)      把这个字符串里的第一个数字(组)换成h,同上

    subn  返回一个元素组,第二个元素是替换的次数

    ret=re.subn('d+','h','字符串')这个打印出来在正常换完的基础上,后面多一个数字告诉你换了几次,这个后面自己加数,就是等于普通的sub了

    re模块的进阶:时间/空间

    compile      节省你使用正则表达式解决问题的时间

    先编译出一个正则表达式,编译成一个变量,在接下来就可以直接使用这个变量了,节省时间

    # ret = re.compile('d+')   # 已经完成编译了

    # print(ret)

    # res = ret.findall('alex83taibai40egon25')

    # print(res)

    # res = ret.search('sjkhk172按实际花费928')

    # print(res.group())

        现在ret就是/d的意思了

    finditer  节省你使用正则表达式解决问题的空间/内存

    ret=re.finditer('d+','字符串')

    for i in ret

      print(i.group())  这个i就等于ret了这很正常

    findall  返回列表,找到所有的匹配项

    search 匹配,就返回一个变量,通过group取匹配到的第一个值,不匹配就返回None,group会报错

    match  相当于search的正则表达式中加个‘^‘

    spilt   返回列表,按照正则规则切割,默认匹配到的内容会被切掉

    sub/subn  替换,按照正则规则去寻找要被替换掉的内容,subn,返回元组,第二个值是替换的次数

    compile  编译一个正则表达式,用这个结果去 search,match,findall,finditer 能够节省时间

    finditer 返回一个迭代器,所有的结果都在这个迭代器中美需要进行循环+group的形式取值,能够节省内存

    import  re

    s='<a>字符串</a>'   标签语言 html网页

    ret=re,search('<(w+)>(w+)</(w+)>',s)  这个s只能在条件后面

    print(ret.group())  打印所有的结果,

    print(ret.group(1))   数字参数代表的是取对应分组中的内容  以w+为一组

    为了findall也可以顺利取到分组中的内容,有一个特殊的语法,就是优先显示分组中的内容

    ret=re.findall('(w+),s)

    print(ret)      这样把左右两边的的a也打印出来了

    ret_re.findall('>(w+)<',s)

    print(ret)      这样就是只打印中间的字符串了

    取消分组优先(?:正则表达式)

    ret=re.findall('d+(.d+)?','数字串例如小数1.234*4。3‘)   在括号的最前面加?:(?:.d+)

    print(ret)                    取消优先,别的不取消

    分组约束某一组字符出现的次数,分组帮助你更精准的找到你真正需要的内容

    split

     ret = re.split('d+','alex83taibai40egon25')

     print(ret)

     ret = re.split('(d+)','alex83taibai40egon25aa')

     print(ret)       这个比较小众,这样切割完数字会保留下来

    分组命名 (?P<这个组的名字>正则表达式)

    s = '<a>wahaha</a>'

     ret = re.search('>(?P<con>w+)<',s)

     print(ret.group(1))

     print(ret.group('con'))       这个就是命名个分组,然后打印分组

    s = '<a>wahaha</a>'

    pattern = '<(w+)>(w+)</(w+)>'

     ret = re.search(pattern,s)

     print(ret.group(1) == ret.group(3))  这个用py自己内置模块来判断两边是否相同

    使用前面的分组 要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致

    pattern = '<(?P<tab>w+)>(w+)</(?P=tab)>'

     ret = re.search(pattern,s)

     print(ret)    这个用正则表达式来做是否相同

    应用有 时间啊2018-1-1   2:22:00    命名中间的必须一样才行,

    正则表达的一个小技巧,如果你要写的太没特点了,就把其他的都弄出来,反着来把它弄出来

     ret=re.findall(r"d+","1-2*(60+(-40.35/5)-(-4*3))")

     从"1-2*(60+(-40.35/5)-(-4*3))"中取整数

     ['1', '2', '60', '40', '35', '5', '4', '3']

     print(ret)

    # 你要匹配的内容太没有特点了 容易和你不想匹配的内容混在一起

    # 精准的取到整数 过滤掉小数

    ret=re.findall(r"d+.d+|d+","1-2*(60+(-40.35/5)-(-4*3))")

    print(ret)

    ret=re.findall(r"d+.d+|(d+)","1-2*(60+(-40.35/5)-(-4*3))")

    ret.remove('')

    print(ret)

    # 正则表达式如果写的足够好的话 能够最大限度的简化我们的操作

    # 正则表达式到底重要到什么程度

        # 掌握作业中的所有内容

        # 能够看懂常用的正则表达式

        # 并且能够做出一些公司特异性要求的修改

  • 相关阅读:
    springboot springcloud zuul 过滤器
    springboot springcloud eureka 熔断器
    javaweb servlet filter
    maven nexus 搭建私服(二)
    springboot springcloud zuul 网关入门
    springboot springcloud 配置中心
    springboot springcloud eureka 入门
    java rabbitmq
    java jvm调优
    maven nexus 搭建私服(一)
  • 原文地址:https://www.cnblogs.com/Mrszhao/p/9496901.html
Copyright © 2011-2022 走看看