• python re模块


    一 正则表达式,又称规则表达式,英文名为Regular Expression,在代码中常简写为regex、regexp或RE,是计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。实现过滤的功能。

      1元字符

        w 匹配字母(包含汉字),数字,下划线

        d 匹配十进制数字

        s 匹配空白字符

         匹配换行符

         匹配制表符

        ^ 匹配字符串的开始

        $匹配字符串的末尾

        a|b 匹配a或者b

        [ ]字符集,只能取其中的一个。字符集只有三个特殊符号:^ : 取反,,例如[^a-z]     :例如 [d]    - :例如 [a-z]

        [^.. ] 匹配除了字符集内所有的字符外的字符

      2 量词  

        每个量词只控制前一个字符的出现次数

        默认模式是贪婪匹配

        量词后面加?,为非贪婪匹配

        * 

        + 

        ? 

        { }

      3 惰性匹配

        ?

      举例:

        d?? 第一个问号表示0个或1个,第二个问号表示惰性运算,取0个。

        .*? 取尽量少的任意字符。一般用在。*?x,表示取前面任意长度的字符,直到第一个x出现。

      4 ( ) 分组  对多个字符进行整体的量词约束

          | 或

    二 re模块的方法

      1 findall,返回列表, 在findall中优先显示( )内的东西。(?:)取消优先级。

    import re
    
    print(re.findall('www.(baidu|google).com','www.baidu.com'))
    print(re.findall('www.(?:baidu|google).com','www.baidu.com'))

      输出:

    ['baidu']
    ['www.baidu.com']
    

      

      2 match ,如果没有找到,返回值是None。如果不为空,调用返回值的group( )方法。

      3 search ,如果没有找到,返回值是None。如果不为空,调用返回值的group( )方法。

        针对match,seach,一般是这样用。

    import re
    res=re.match('d+?','123abv')
    if res:
        print(res.group())

      输出:1  

      4 split,切割。加上( ) ,保留被分割的对象。

    print(re.split('d','abc123qwe'))
    print(re.split('(d)','abc123qwe'))

      输出:

    ['abc', '', '', 'qwe']
    ['abc', '1', '', '2', '', '3', 'qwe']

      5 sub,替换,与字符串的replace方法一样,默认全部替换,同样也可以指定替换的个数。

    import re
    print(re.sub('d','A','123abc',1))
    print(re.sub('d','A','123abc',))

      输出:

    A23abc
    AAAabc

      6 compile 将正则表达式编译成一个正则表达式对象。后面直接用正则表达式对象调用re模块方法,就可以了。

    import re
    obj=re.compile('d+')
    print(obj.match('123abv').group())

      输出: 123

      7 finditer 。

      返回的结果是一个迭代的。

      for循环遍历得到的元素,本质上是调用match方法得到的,所以然后调用元素的group( )方法。

    import re
    res=re.finditer('d','abc123qwe')
    print(res,type(res))
    for i in res:
        print(type(i),i.group())

      输出:

    <callable_iterator object at 0x000001C573FE6DA0> <class 'callable_iterator'>
    <class '_sre.SRE_Match'> 1
    <class '_sre.SRE_Match'> 2
    <class '_sre.SRE_Match'> 3

      8 (?P< xxx>)的用法

    import re
    res=re.search('<(?P<tag>div id="logo".*?)>','<div id="ntp-contents"><div id="logo" title="Google"></div><div id="fakebox"><div id="fakebox-text"></div><input id="fakebox-input" autocomplete="off" tabIndex="-1" type="url"aria-hidden="true"><div id="cursor"></div>')
    print(res.group('tag'))

      输出:

    div id="logo" title="Google"

       9 re.S  含义:.可以匹配包括换行符在内的所有字符。

    三 举例

      匹配小数    点是特殊字符,必须转义

    import re
    print(re.findall('d+.d+','2.14'))

      匹配整数    解决了我的一个心头问题

    import re
    res=re.findall('d+.d+|(d+)','2.14,50,12')
    while '' in res:
        res.remove('')
    print(res)

    四 关于group的说明。

      官方文档:https://docs.python.org/3.6/library/re.html#re.match.group

    s = 'https://www.baidu.com?user=zuo&password=123'
    res = re.search('?(.*?)&(.+)',s)
    # print(res)
    print(res.group())
    print(res.group(1))
    print(res.group(2))
    print(res.group(2,1))
    print(res.group(1,2))

      输出:

    ?user=zuo&password=123
    user=zuo
    password=123
    ('password=123', 'user=zuo')
    ('user=zuo', 'password=123')

      group中的数字代表的是正则匹配是对应的第一个小括号!

  • 相关阅读:
    Vue
    linux-----docker
    linux基础
    Flask基础
    websocket
    css
    Mysql数据库基础
    IO多路复用
    线程和协程
    sh_02_del关键字
  • 原文地址:https://www.cnblogs.com/654321cc/p/7505721.html
Copyright © 2020-2023  润新知