zoukankan      html  css  js  c++  java
  • 第二十三天学习:正则(2)

    re.match(pattern, string[, flags])
    这个方法将会从string(我们要匹配的字符串)的开头开始,尝试匹配pattern,一直向后匹配,如果遇到无法匹配的字符,立即返回None,如果匹配未结束已经到达string的末尾,也会返回None。两个结果均表示匹配失败,否则匹配pattern成功,同时匹配终止,不再对string向后匹配

    import re
    
    pattern = re.compile(r'hello')
    
    result1 = re.match(pattern, 'hello')
    result2 = re.match(pattern, 'hello world')
    result3 = re.match(pattern, 'h hello')
    
    print(result1.group())
    print(result2)
    print(result3)
    结果:
    hello
    <_sre.SRE_Match object at 0x02459608>
    None
    

      

    re.search(pattern, string[, flags])
    search方法与match方法极其类似,区别在于match()函数只检测re是不是在string的开始位置匹配,search()会扫描整个string查找匹配,match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回None。

    import re
    pattern = re.compile(r'hello')
    result1 = re.search(pattern, 'hello')
    result2 = re.search(pattern, 'hhh hello')
    print(result1.group())
    print(result2.group())
    结果:
    hello
    hello
    

      

    re.split(pattern, string[, maxsplit])
    按照能够匹配的子串将string分割后返回列表。maxsplit用于指定最大分割次数,不指定将全部分割。
    re.findall(pattern, string[, flags])
    搜索string,以列表形式返回全部能匹配的子串
    re.finditer(pattern, string[, flags])
    搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器
     
    实例:

    import re
    
    pattern = re.compile(r'd+')
    str1 = 'one1two2three3four4'
    print(re.split(pattern, str1))
    print(re.findall(pattern, str1))
    print(re.finditer(pattern, str1))
    for i in re.finditer(pattern, str1):
        print(i, i.group())
    
    #结果:
    ['one', 'two', 'three', 'four', '']
    ['1', '2', '3', '4']
    <callable-iterator object at 0x02446DB0>
    (<_sre.SRE_Match object at 0x00529D40>, '1')
    (<_sre.SRE_Match object at 0x02489608>, '2')
    (<_sre.SRE_Match object at 0x00529D40>, '3')
    (<_sre.SRE_Match object at 0x02489608>, '4')
    

      

    关于match对象的常用属性和方法
    Match对象是一次匹配的结果,包含了很多关于此次匹配的信息
    属性:
    1.string: 匹配时使用的文本。
    2.re: 匹配时使用的Pattern对象。
    方法:
    1.group([group1, …]):
    获得一个或多个分组截获的字符串;指定多个参数时将以元组形式返回。group1可以使用编号也可以使用别名;编号0代表整个匹配的子串;不填写参数时,返回group(0);没有截获字符串的组返回None;截获了多次的组返回最后一次截获的子串。
    2.groups([default]):
    以元组形式返回全部分组截获的字符串。相当于调用group(1,2,…last)。default表示没有截获字符串的组以这个值替代,默认为None。
    3.groupdict([default]):
    返回以有别名的组的别名为键、以该组截获的子串为值的字典,没有别名的组不包含在内。default含义同上。
     
    import re
    # 匹配如下内容:单词+空格+单词+任意字符
    m = re.match(r'(w+) (w+)(?P<sign>.*)', 'hello world!')
     
    print "m.string:", m.string
    print "m.re:", m.re
    print "m.group():", m.group()
    print "m.group(1,2):", m.group(1, 2)
    print "m.groups():", m.groups()
    print "m.groupdict():", m.groupdict()
    
    结果:
    m.string: hello world!
    m.re: <_sre.SRE_Pattern object at 0x00415760>
    m.group(): hello world!
    m.group(1,2): ('hello', 'world')
    m.groups(): ('hello', 'world', '!')
    m.groupdict(): {'sign': '!'}
    

      

    同样,search方法的返回对象同样match()返回对象的方法和属性。

  • 相关阅读:
    Qt -- 鼠标移入移出事件 enterEvent、leaveEvent
    QT -- QPainter介绍
    Qt -- 浅析QFontMetrics 获取字体宽度,高度
    函数声明后面的const用法
    QT -- 读取file数据/写数据到file
    QT -- QLineEdit按下回车键获取信息
    C++ -- fgets,fputs,fputc,fgetc总结
    QT -- QString / std::string转换为const char*
    C++ -- fopen函数用法
    HTML DOM树
  • 原文地址:https://www.cnblogs.com/yshan13/p/7842251.html
Copyright © 2011-2022 走看看