zoukankan      html  css  js  c++  java
  • re模块

    一、什么是模块:
    常见的场景:一个模块就是一个包含了python定义和声明的文件

    二、为何要使用模块:
    如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久
    保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。

    三、模块的导入应该在程序开始的地方

    四、re模块
    re模块下的常用方法
    
    import re
    
    print(re.findall("a","eva egon yuan"))        #['a', 'a']
    返回所有满足匹配条件的结果,放在列表里
    
    
    print(re.search("a","eva egon yuan").group())   #a
    1.函数会在字符串内查找模式匹配,直到找到第一个匹配然后返回一个包含匹配信息的对象,
    2.两个参数,正则表达式和待匹配的字符串,返回的是第一个满足条件的项
    该对象可以通过group()方法获取到具体的值,如果字符串没有匹配,
    使用.group()会报错,所以应该在使用group防止之前做判断
    
    
    print(re.match("a","aeva egon yuan").group())   #a
    同search,不同的是match方法的正则自带^效果
    
    
    ret = re.search("([a-z])(d)","ab2748cdef14g239")
    print(ret.group())        #b2     #直接获取正则规则匹配的项,内容示意
    print(ret.group(1))       #b      #如果给group传参数,那么传递的参数能够代替在正则表达式中组的次序
    print(ret.group(2))       #2      #从而获取到对应次序上的值
    
    
    print(re.split("[ab]","abcd"))     #['', '', 'cd']
    先按”a“分割得到 " ""bcd" ,再对“bcd”进行分割 " " ,"cd"

    ret = re.sub('d', 'H', 'eva3egon4yuan4', 1)#将数字替换成'H',参数1表示只替换1个 print(ret) #evaHegon4yuan4

    print(re.subn(
    "d","H","eva3egon4yuan4")) #('evaHegon4yuan4', 3) 将数字替换成“H”,返回元组(替换的结果,替换了多少次)


    print(re.compile(
    "d{3}").search('abc123eeee').group()) #123
    将正则表达式编译成一个正则表达对象,规则要匹配的是3个数字 正则表达式对象调用search,
    参数为待匹配的字符串


    res
    = re.finditer('d', 'ds3sy4784a') #<callable_iterator object at 0x000001A8D8D07860> print([i.group() for i in res])
    #['3', '4', '7', '8', '4'] findier 返回一个存放匹配结果的迭代器


    findall的优先级 print(re.findall(
    "www.(baidu|oldboy).com","www.oldboy.com")) #['oldboy'] 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可,?:是取消权限 print(re.findall("www.(?:baidu|oldboy).com","www.oldboy.com")) #['www.oldboy.com'] print(re.findall("[a-z]d","ab2748cdef14g239")) #['b2', 'f1', 'g2'] print(re.findall("([a-z])d","ab2748cdef14g239")) #['b', 'f', 'g'] 在findall 的正则表达式中有分组,仍然按照正则规则取匹配,只不过在显示的时候,只显示分组的内容 print(re.findall("(?:[a-z])d","ab2748cdef14g239")) #['b2', 'f1', 'g2'] findall中取消分组 split的优先级查询 print(re.split("d+","eva3egon4yuan")) #['eva', 'egon', 'yuan'] print(re.split("(d+)","eva3egon4yuan")) #['eva', '3', 'egon', '4', 'yuan'] 在匹配部分加上()之后所切出的结果是不同的 没有()的没有保留所匹配的项,但是有()的却能够保留了匹配的项 这个在某些需要保留匹配部分的使用过程是非常重要的 练习题: 1.匹配标签(分组命名) import re ret = re.search("<(?P<tag_name>w+)>w+</(?P=tag_name)>","<h1>hello</h1>") print(ret.group("tag_name")) #h1 print(ret.group()) #<h1>hello</h1> 还可以在分组中利用?P<name>的形式给分组起名字 获取的匹配结果可以直接用group("名字")拿到对应的值 ret = re.search(r"<(w+)>w+</1>","<h1>hello</h1>") print(ret.group()) #<h1>hello</h1> print(ret.group(1)) #h1 如果不给组起名字。也可以利用序号来找到对应的组,表示要找的内容和前面的组内容 一致,获取的匹配结果可以直接用group(序号)拿到对应的值 2.匹配整数(有一些干扰项需要排除) import re ret = re.findall(r"-?d+.d*|(-?d+)","1-2*(60+(-40.35/5)-(-4*3))") ret.remove("") print(ret) #['1', '-2', '60', '5', '-4', '3'] 3.r取消这个字符串中转译作用 凡是出现且没有特殊意义的时候都可以在字符串的前面加上r字符 r"\n" r" " 例子:(路径和正则表达式) r"app tp" flags有很多可选值: re.I(IGNORECASE)忽略大小写,括号内是完整的写法 re.M(MULTILINE)多行模式,改变^和$的行为 re.S(DOTALL)点可以匹配任意字符,包括换行符 re.L(LOCALE)做本地化识别的匹配,表示特殊字符集 w, W, , B, s, S 依赖于当前环境,不推荐使用 re.U(UNICODE) 使用w W s S d D使用取决于unicode定义的字符属性。在python3中默认使用该flag re.X(VERBOSE)冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释
    
    
    
     
  • 相关阅读:
    线程的补充
    线程
    进程
    操作系统和进程
    socketserver模块实现并发和连接合法性验证
    socketserver实例化过程
    粘包现象和解决方法
    网络通信协议
    初探网络
    Python网络编程
  • 原文地址:https://www.cnblogs.com/lara0520/p/8503380.html
Copyright © 2011-2022 走看看