zoukankan      html  css  js  c++  java
  • python笔记56-re正则匹配re.match

    前言

    re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
    re.search 扫描整个字符串并返回第一个成功的匹配。

    re.match

    re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

    使用语法:

    re.match(pattern, string, flags=0)
    

    函数参数说明:

    • pattern 匹配的正则表达式
    • string 要匹配的字符串。
    • flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符,可选标志

    匹配成功re.match方法返回一个匹配的对象,否则返回None。
    我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

    • group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
    • groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

    match 使用示例

    从起始位置开始匹配,没匹配到返回None

    import re
    
    # 在起始位置匹配
    r1 = re.match("hello", "hello world!")
    # 不在起始位置匹配
    r2 = re.match("world", "hello world!")
    print(r1)
    print(r2)
    

    返回

    import re
    
    # 在起始位置匹配
    r1 = re.match("hello", "hello world!")
    # 不在起始位置匹配
    r2 = re.match("world", "hello world!")
    print(r1)
    print(r2)
    

    运行结果

    <_sre.SRE_Match object; span=(0, 5), match='hello'>
    None
    

    使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

    import re
    line = "Cats are smarter than dogs"
    
    matchObj = re.match(r'(.*) are (.*?) .*', line, re.M|re.I)
    
    if matchObj:
        print("matchObj.group() : ", matchObj.group())
        print("matchObj.group(1) : ", matchObj.group(1))
        print("matchObj.group(2) : ", matchObj.group(2))
    else:
        print("No match!!")
    

    运行结果

    matchObj.group() :  Cats are smarter than dogs
    matchObj.group(1) :  Cats
    matchObj.group(2) :  smarter
    

    search 示例

    先看第一个案例,找出下面文本中的blog地址

    import re
    
    
    # 取出 blog 地址
    a = '作者-上海悠悠 QQ交流群:717225969 blog地址:https://www.cnblogs.com/yoyoketang/ 欢迎收藏'
    res = re.search(r'blog地址:(.*?) 欢迎收藏', a)
    print(res)  # 返回Match object
    print(res.group(1))
    
    # 打印内容
    # <_sre.SRE_Match object; span=(24, 71), match='blog地址:https://www.cnblogs.com/yoyoketang/ 欢迎收藏'>
    # https://www.cnblogs.com/yoyoketang/
    

    如果匹配到返回一个Match object对象,用group(1)取出匹配的值。

    如果没匹配到返回的是None,调用group(1)方法会抛异常

    import re
    
    
    # 取出 blog 地址
    a = '作者-上海悠悠 QQ交流群:717225969 blog地址:https://www.cnblogs.com/yoyoketang/ 欢迎收藏'
    res = re.search(r'blog地址X:(.*?) 欢迎收藏', a)
    print(res)  # 返回Match object
    print(res.group(1))
    

    会抛出异常

    Traceback (most recent call last):
      File "D:/soft/git/web_git/case/a.py", line 29, in <module>
        print(res.group(1))
    None
    AttributeError: 'NoneType' object has no attribute 'group'
    

    于是可以加个判断再取值: result = res.group(1) if res else None

    import re
    
    
    # 取出 blog 地址
    a = '作者-上海悠悠 QQ交流群:717225969 blog地址:https://www.cnblogs.com/yoyoketang/ 欢迎收藏'
    res = re.search(r'blog地址:(.*?) 欢迎收藏', a)
    print(res)  # 返回Match object
    # 加个判断,如果没匹配到给None值
    result = res.group(1) if res else None
    print(result)
    

    search教程参考这篇https://www.cnblogs.com/yoyoketang/p/14249008.html

  • 相关阅读:
    浏览器阻止window.open的解决方案
    汇总前端最最常用的JS代码片段
    检测是否是微信浏览器
    添加标签
    如何去掉textarea右下角的灰色角标?
    移动WEB前端开发资源整合
    图片文字水平居中(移动端)
    文本形式访客计数器
    如何处理加括号的四则混合运算表达式——基于二叉树的实现(Eclipse平台 Java版)
    深拷贝,浅拷贝
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/14921968.html
Copyright © 2011-2022 走看看