正则表达式

一、正则表达式作用

  • 匹配指定规则的字符串

二、常用方法

  • findall():RE匹配的所有子串,并把它们作为一个列表返回

    """
    findall():RE匹配的所有子串,并把它们作为一个列表返回
    """
    res=re.findall('www','www.baidu.www.com')
    print(res)
    输出:['www', 'www']

  • match():RE是否在字符创开始的位置匹配(只匹配开始位置),如果不是起始位置匹配成功的话,match()就返回none

    匹配起始位置为www,非其实位置返回None,group()返回re匹配的字符串
    res = re.match('www','www.baidu.com').group()
    print(res)
    输出:www

  • search():RE扫描整个字符串并返回第一个成功的匹配

    在'www.baidu.com'中匹配'www',返回匹配到的第一个
    result = re.search('www','www.baidu.com').group()
    print(result)
    输出:www

  • finditer():RE匹配的所有子串,并把它们作为一个迭代器返回

    """
    finditer():匹配所有找到的子串,返回一个可迭代对象
    """
    res = re.finditer('www','www.baidu.www.com')
    print(res)
    for i in res:
    print(i.group())
    输出:
    <callable_iterator object at 0x10e6df8d0>
    www
    www

  • 结果处理函数

    • group():返回RE匹配的字符串
    • span():返回匹配到字符串开始索引位置和结束索引位置的元组(开始,结束)
  • start():返回匹配到字符串的开始索引位置

  • end():返回匹配到字符串的结束索引位置

  • sub():替换字符串,返回替换后的字符串

    """
    sub():替换字符串,返回替换后的字符串

  • subn():替换字符串,返回替换后的字符串,并给出替换了的次数
    """

    res4 = re.subn('\D+','替换非数字的部分','w2ww.5555.com')
    输出:('替换非数字的部分2替换非数字的部分5555替换非数字的部分', 3)
    res5 = re.subn('\d+','替换数字部分','5www.5555.com')
  • 输出:('替换数字部分www.替换数字部分.com', 2)
  • split():切割,根据某个字符切割(根据+,-,*,\ 切割su这个字符串,+-*有特殊意义需要反斜杠转义)

    """
    根据.进行切割,特殊意义的字符需要通过反斜杠()进行转义
    """
    res2 = re.split('.','www.baidu.com')
    print(res2)
    输出:['www', 'baidu', 'com']

三、正则匹配分类

  • 单字符匹配【 每次只匹配一个字符】

    元字符描述
    .匹配任意一个字符(除了\n),匹配多次每次匹配一个字符,返回匹配结果的list【匹配\n时会报错】
    [ ]匹配[ ]中列举的任意一个字符 【匹配[ ]中的任何一个字符】
    \d匹配数字,即0-9
    \D匹配非数字,即不是数字
    \s匹配空白,即 空格,tab键 【都是空白】
    \S匹配非空白
    \w匹配非特殊字符,即a-z、A-Z、0-9、_、汉字
    \W匹配特殊字符,即非字母、非数字、非汉字 【非下划线】
    • 代码演示

      • . 匹配任意一个字符(除了\n),匹配多次每次匹配一个字符,返回匹配结果的list

      """
      .:匹配任意一个字符(除了\n),匹配多次每次匹配一个字符,返回匹配结果的list
      需求:获取h开头的2个字符
      """
      匹配h开头的任意2个字符
      res='h.'
      ss='hello python'
      result = re.findall(res,ss)
      print(result)
      输出:['he', 'ho']

      • [ ]:匹配[ ]中列举的任意一个字符 【匹配[ ]中的任何一个字符】

        """
        []:匹配[ ]中列举的任意一个字符 【匹配[ ]中的任何一个字符】
        需求:获取heo
        """
        匹配heo中任意一个
        res='[heo]'
        ss='hello python'
        result = re.findall(res,ss)
        print(result)
        输出:['h','e','o','o']

      • \d:匹配数字,即0-9

        """
        \d:匹配数字,即0-9
        需求:匹配所有的数字
        """
        匹配数字
        res='\d'
        ss='he4l5lo1pyt0h3on5'
        result = re.findall(res,ss)
        print(result)
        输出:['4', '5', '1', '0', '3', '5']

      • \D:匹配非数字,即不是数字

        """
        \D:匹配非数字,即不是数字
        需求:匹配非数字
        """
        匹配非数字
        res='\D'
        ss='he4l5lo1pyt0h3o&n5'
        result = re.findall(res,ss)
        print(result)
        输出:['h', 'e', 'l', 'l', 'o', 'p', 'y', 't', 'h', 'o', '&', '
        ', 'n']

      • \s:匹配空白,即 空格,tab键 【都是空白】

        """
        \s:匹配空白,即 空格,tab键 【都是空白】
        """
        匹配空白
        res='\s'
        ss='hello python '
        result = re.findall(res,ss)
        print(result)
        输出:[' ', ' ', ' ', ' ', ' ']

      • \S:匹配非空白

        """
        \S:匹配非空白
        """
        匹配非空白
        res='\S'
        ss='hello python '
        result = re.findall(res,ss)
        print(result)
        输出:['h', 'e', 'l', 'l', 'o', 'p', 'y', 't', 'h', 'o', 'n']

      • \w:匹配非特殊字符,即a-z、A-Z、0-9、_、汉字

        """
        \w:匹配非特殊字符,即a-z、A-Z、0-9、_、汉字
        """
        匹配非特殊字符
        res='\w'
        ss='hello好好学python'
        result = re.findall(res,ss)
        print(result)
        输出:['h', 'e', 'l', 'l', 'o', '好', '好', '学', 'p', 'y', 't', 'h', 'o', 'n']

      • \W:匹配特殊字符,即非字母、非数字、非汉字 【非下划线】

        """
        \W:匹配特殊字符,即非字母、非数字、非汉字 【非下划线】
        """
        匹配特殊字符
        res='\W'
        ss='hello好好学python_-&^%$#@'
        result = re.findall(res,ss)
        print(result)
        输出:['-', '
        ', '&', '^', '%', '$', '#', '@']

  • 多字符匹配

    元字符描述
    *匹配前一个字符出现0次或者无限次,即可有可无,【0次--无限次】【贪婪模式】
    +匹配前一个字符出现1次或者无限次,即至少有1次匹配一个字符串【1次--无限次】;【贪婪模式】
    举例:第一个字符是t,最后一个字符串是o,中间至少有一个字符re.match("t.+o", "two")
    ?匹配前一个字符出现0次或者1次,即要么有1次,要么没有,【最多匹配一次】;【非贪婪模式】
    举例:匹配 https re = 'https?'
    {n}匹配前一个字符连续出现n次
    {m,n}匹配前一个字符连续出现从m到n次 【至少出现m次,最多出现n次】【省略n,匹配前一个字符中至少出现m次】
    • 代码演示

      • *:匹配前一个字符出现0次或者无限次,即可有可无

      """
      :匹配前一个字符出现0次或者无限次,即可有可无,未匹配到就是空
      """
      匹配h出现0次或者多次无限次数
      res='h
      '
      ss='hello好好学python_-*&^%$#@'
      result = re.findall(res,ss)
      print(result)
      输出:['h', '', '', '', '', '', '', '', '', '', '', 'h', '', '', '', '', '', '', '', '', '', '', '', '']

      • +:匹配前一个字符出现1次或者无限次,即至少有1次匹配一个字符串
        """
        +:匹配前一个字符出现1次或者无限次,即至少有1次匹配一个字符串
        贪婪模式
        """
        匹配o 至少出现1次或者多次
        res='ho+'
        ss='hello python hoo'
        result = re.findall(res,ss)
        print(result)
        输出:['ho', 'hoo']
      • ?:匹配前一个字符出现0次或者1次,即要么有1次,要么没有
        """
        ?:匹配前一个字符出现0次或者1次,即要么有1次,要么没有
        """
        匹配o出现零次或者一次
        res='ho?'
        ss='hello python hoo'
        result = re.findall(res,ss)
        print(result)
        输出:['h', 'ho', 'ho']
      • {n}:匹配前一个字符连续出现n次
        """
        {n}:匹配前一个字符连续出现n次
        """
        匹配l连续出现2次
        res='hel{2}'
        ss='hello python helll'
        result = re.findall(res,ss)
        print(result)
        输出:['hell', 'hell']
      • {m,n}:匹配前一个字符连续出现从m到n次
        """
        {m,n}:匹配前一个字符连续出现从m到n次
        """
        匹配l连续出现2-4次
        res='hel{2,4}'
        ss='hello python helll hellllll'
        result = re.findall(res,ss)
        print(result)
        输出:['hell', 'helll', 'hellll']
  • 逻辑运算

    元字符描述
    将两个匹配条件进行逻辑“或”(or)运算

    """
    |:将两个匹配条件进行逻辑“或”(or)运算
    """
    匹配he 或者 py
    res='he|py'
    ss='hello python helll hellllll'
    result = re.findall(res,ss)
    print(result)
    输出:['he', 'py', 'he', 'he']

  • 边界值(了解)

    元字符描述
    ^匹配输入字符串开始位置
    $匹配输入字符串结束位置
    • 代码演示
      • ^:匹配输入字符串开始位置
        """
        ^:匹配输入字符串开始位置
        """
        匹配he开头的
        res='^heh'
        ss='hello python'
        result = re.findall(res,ss)
        print(result)
        输出:['he']
      • $:匹配输入字符串结束位置
        """
        $:匹配输入字符串结束位置
        """
        匹配on结尾
        res='on$'
        ss='hello python'
        result = re.findall(res,ss)
        print(result)
  • 匹配分组

    元字符描述
    ()只取括号内的值
    • 代码演示
      匹配member_id,通过()取出对应的值,去掉井号
      re_str = '#(\w.+?)#'
      ss = '{"member_id":"#member_id#","key2":"val2","bid_id":"#bid_id#"}'
      test_re = re.findall(re_str, ss)
      输出:['member_id', 'bid_id']

三、多字符匹配模式

  • 贪婪模式:尽可能匹配多个(+)

    """
    尽可能多匹配数字
    """
    ss ='hell123opy456thon'
    res = re.findall(r'\d+',ss)
    print(res)
    输出:['123', '456']

  • 非贪婪模式:尽可能匹配更少的,在数量表达后面加问号(?)

    ss ='hell123opy456thon'
    res = re.findall(r'\d?',ss)
    print(res)
    输出:['', '', '', '', '1', '2', '3', '', '', '', '4', '5', '6', '', '', '', '', '']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值