美文网首页
_正则表达式

_正则表达式

作者: 桃阿 | 来源:发表于2018-05-31 12:02 被阅读0次

    -正则表达式-

    是对字符串操作的一种逻辑公式。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的

    - 常见的匹配模式-

    模式 描述
    \w 匹配字母数字及下划线
    \W 匹配非字母数字及下划线
    \s 匹配任意空白字符 <==> [\t\n\r\f]
    \S 匹配任意非空字符
    \d 匹配任意数字,等价[0-9]
    \D 匹配任意非数字
    \A 匹配字符串开始
    \Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束标识符
    \z 匹配字符串结束
    \G 匹配最后匹配完成的位置
    \n 匹配一个换行符
    \t 匹配一个制表符
    ^ 匹配字符串的开始
    $ 匹配字符串的末尾
    . 匹配任意字符,除了换行符
    [...] 用来表示一组字符,单例列出
    [^...] 不在[]中的字符
    * 匹配0或多个的表达式
    + 匹配1个或多个的表达式
    ? 匹配0或1由前面的正则表达式定义的片段,非贪婪方式
    (n) 精确匹配n个前面表达式
    (n,m) 匹配n到m次 由前面的正则表达式定义的片段,贪婪方式
    a\b 匹配a或b
    () 匹配括号内的表达式

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

    [01]re.match> 常规匹配

    import re
    content = 'hello i have 9999'
    result = re.match('^\w{5}\s\w\s\w{4}\s\d{4}$', content)
    print(result)
    print(len(content))  #长度
    print(result.group())
    print(result.span())        # 范围
    
    <_sre.SRE_Match object; span=(0, 17), match='hello i have 9999'>
    17
    hello i have 9999
    (0, 17)
    

    [02]re.match> 泛匹配

    import re
    content = 'hello 123'
    result = re.match('^hello.*23$', content)
    print(result)
    
    
    <_sre.SRE_Match object; span=(0, 9), match='hello 123'>
    

    [03]re.match> 匹配目标

    import re
    content = 'I can do magic Num 123'
    result = re.match('^I.*Num\s(\d+)$', content)
    print(result)
    print(result.group(1))  #显示第一个括号里的数字
    
    <_sre.SRE_Match object; span=(0, 22), match='I can do magic Num 123'>
    123
    

    [04]re.match> 贪婪匹配

    import re
    content = 'hello 1234567'
    result = re.match('^he.*(\d+)$', content)
    print(result)
    print(result.group(1))
    
    <_sre.SRE_Match object; span=(0, 13), match='hello 1234567'>
    7
    

    [05]re.match> 非贪婪匹配

    import re
    content = 'hello 1234567'
    result = re.match('^he.*?(\d+)$', content)
    print(result)
    print(result.group(1))
    
    <_sre.SRE_Match object; span=(0, 13), match='hello 1234567'>
    1234567
    

    [06]re.match> 转义

    import re
    content = 'this apple is $50'
    result = re.match('^th.*?is\s\$(\d+)$', content)
    print(result) # 注意 金钱后面变为'\$',否则会报错
    
    <_sre.SRE_Match object; span=(0, 17), match='this apple is $50'>
    

    re.search
    re.search扫描整个字符串并返回第一个成功的匹配
    - 整个字符串
    - 返回一个

    [01]re.search> 匹配演示

    
    import re
    message = """
    <li>
        <span>Hello</span>
        <a> 你好</a>
    </li>
    
    """
    mes = re.search("span>(.*?)<.*?a>(.*?)</a>", message, re.S)
    print(mes.group(1))
    print(mes.group(2))
    
    Hello
    你好
    

    re.findall
    re.findall搜索字符串,以列表形式返回全部能匹配的子串

    [01]re.findall> 匹配演示

    import re
    import requests
    
    response = requests.get("http://www.taobao.com/")
    #print(response.text)       #打印了html文档
    link = re.findall('href="(.*?)"',response.text, re.S)
    
    for each in link:
        print (each)
    
    这样就会打印a标签里面的连接(不完善)
    

    re.sub
    re.sub替换字符串中每一个匹配的字串后返回替换后的字符串

    import re
    
    content = "My QQ is 569781231"
    content = re.sub('\d+', ' it\' s a secret', content)
    print(content)
    
    My QQ is  it' s a secret
    

    相关文章

      网友评论

          本文标题:_正则表达式

          本文链接:https://www.haomeiwen.com/subject/qykqsftx.html