• Python之re模块


    re模块

    在Python中想要使用正则表达式,就需要调用re模块来实现。

    在 re 模块下的常用方法:

    调用时程序最上面需要写

    import re

    常用的几个关键字:
    findall  :re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。

    格式:re.findall(‘前面放要查找的内容’,‘这里放被查找的内容’)

    search :re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。

                     返回的变量需要调用group才能拿到结果 #,如果没有找到,那么返回None,调用group会报错。

    格式:re.search(‘前面放要查找的内容’,‘这里放被查找的内容’) 

    match :决定RE是否在字符串刚开始的位置匹配。//注:这个方法并不是完全匹配。当pattern结束时若string还有剩余字符,仍然视为成功。

    想要完全匹配,可以在表达式末尾加上边界匹配符'$'。

    match是从头开始匹配,如果正则规则从头开始可以匹配上,就返回一个变量。  匹配的内容需要用group才能显示 。 如果没匹配上,就返回None,调用group会报错。

    格式: re.match(‘前面放要查找的内容’,‘这里放被查找的内容’)

    compile : 只会从开头匹配,如果不是开头的字符串,那么将不会匹配成功。将正则表达式编译成为一个 正则表达式对象。

    格式:re.compile

    search  :  re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。

    格式:re.search(pattern, string, flags=0)

    *注:match和search一旦匹配成功,就是一个match object对象,而match object对象有以下方法:

    • group() 返回被 RE 匹配的字符串
    • start() 返回匹配开始的位置
    • end() 返回匹配结束的位置
    • span() 返回一个元组包含匹配 (开始,结束) 的位置
    • group() 返回re整体匹配的字符串,可以一次输入多个组号,对应组号匹配的字符串。

    a. group()返回re整体匹配的字符串, b. group (n,m) 返回组号为n,m所匹配的字符串,如果组号不存在,则返回indexError异常 c.groups()groups() 方法返回一个包含正则表达式中所有小组字符串的元组,从 1 到所含的小组号,通常groups()不需要参数,返回一个元组,元组中的元就是正则表达式中定义的组。 

    finditer:搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。找到 RE 匹配的所有子串,并把它们作为一个迭代器返回。

    格式  :  re.finditer(pattern, string, flags=0)

    split :按照能够匹配的子串将string分割后返回列表。可以使用re.split来分割字符串,如:re.split(r's+', text);将字符串按空格分割成一个单词列表。

    格式:re.split(pattern, string[, maxsplit])

    sub : 使用re替换string中每一个匹配的子串后返回替换后的字符串。

    re.sub还允许使用函数对匹配项的替换进行复杂的处理。

    如:re.sub(r's', lambda m: '[' + m.group(0) + ']', text, 0);将字符串中的空格' '替换为'[ ]'。

    格式:re.sub(pattern, repl, string, count)

     subn:返回替换次数。

    格式:re.subn(pattern, repl, string, count=0, flags=0)

    一些注意点:

    1、re.match与re.search与re.findall的区别:

    re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

    a=re.search('[d]',"abc33").group()
    print(a)
    p=re.match('[d]',"abc33")
    print(p)
    b=re.findall('[d]',"abc33")
    print(b)
    执行结果:
    None
    ['3', '3']

    2、贪婪匹配与非贪婪匹配

    *?,+?,??,{m,n}?    前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配

    a = re.findall(r"a(d+?)",'a23b')
    print(a)
    b = re.findall(r"a(d+)",'a23b')
    print(b)
    执行结果:
    ['2']
    ['23']
    
    a = re.match('<(.*)>','<H1>title<H1>').group()
    print(a)
    b = re.match('<(.*?)>','<H1>title<H1>').group()
    print(b)
    执行结果:
    <H1>title<H1>
    <H1>
    a = re.findall(r"a(d+)b",'a3333b')
    print(a)
    b = re.findall(r"a(d+?)b",'a3333b')
    print(b)
    执行结果如下:
    ['3333']
    ['3333']
    #######################
    这里需要注意的是如果前后均有限定条件的时候,就不存在什么贪婪模式了,非匹配模式失效。
  • 相关阅读:
    【学习总结】SQL的连接:join -- 内连接外连接左连接右连接
    【学习总结】测试工具jmeter-从入门到精通-汇总
    【刷题】面筋-数据库-关系型数据库与非关系型数据库Nosql区别汇总
    【刷题】面筋-数据结构-排序算法的复杂度、稳定性、内部外部排序
    【刷题】面筋-测开-测试应该什么时候介入
    【问题解决方案】GitHub图片不显示的问题通过修改hosts解决
    【刷题】面筋-网络-HTTP和HTTPS
    【刷题】面筋-网络-数据传输方式
    【刷题】面筋-网络-TCP三次握手和四次挥手的全过程
    【刷题】面筋-网络-常见网络模型与各层网络协议
  • 原文地址:https://www.cnblogs.com/DI-DIAO/p/8252326.html
Copyright © 2020-2023  润新知