zoukankan      html  css  js  c++  java
  • python记录_day23 正则表达式 re模块

    一、 正则表达式

    使用python的re模块之前应该对正则表达式有一定的了解

    正则表达式是对字符串操作的一种逻辑公式。我们一般使用正则表达式对字符串进行匹配和过滤。

    正则的优缺点:

    优点:灵活, 功能性强, 逻辑性强.

    缺点:上手难,但一旦学会这东西非常好用

    # 正则表达的组成:普通字符、元字符、限定符

    普通字符不用说的,就是常用的字母,数字,汉字这些

    ##贪婪匹配

    .*    点星 表示尽可能多的匹配

    ## 惰性匹配

    .*?  点星问号 尽可能少的匹配

    ##  转义

    对 “” 进行转义可以用 “\” ,也可以在字符串开头加上r

    ## () 表示分组,括号内的表达式是一个整体     如果一个表达式中有分组,那么()后面的 1 表示拿前边组的匹配结果

    二、re模块

    re模块是python提供的一套关于处理正则表达式的模块. 核心功能有四个:

    re.search()      #搜索,搜到结果就返回,没有结果返回None

    re.match()       #只能从头开始匹配  相当于默认加了^

    re.findall()       #返回所有匹配项

    re.finditer()      #返回所有匹配项的迭代器

     1 import re
     2 
     3 # 搜索,搜到结果就返回
     4 ret = re.search("a","alex")
     5 print(ret.group())  #结果要用group来取
     6 
     7 #从头开始匹配,匹配到就返回
     8 a = re.match('','回眸一笑百媚生')   #相当于匹配 ^a  默认加了开头符
     9 print(a.group())
    10 
    11 #返回所有匹配项 列表
    12 lst =re.findall('a','alexa')
    13 print(lst)
    14 
    15 #返回一个迭代器
    16 ret = re.finditer('a','alexa')
    17 for el in ret:
    18     print(el.group())
    19     print(el)
    核心操作

    ##其他操作

    re.split()      #根据正则表达式进行切割

    re.split("(表达式)","str")      #切割后保留切割的内容

    re.sub()   #替换

    re.subn()    #替换    返回的是一个元组

    re.compile(表达式, re.S)   #把正则表达式预加载    参数re.S能让惰性匹配忽略换行

    注意:

    在re中()的优先级比较高,会优先返回括号内匹配的内容

    (?:)    在括号里加?:表示取消优先级

    (?P<name>)       这样是给()匹配的内容命名

     1 #() 表优先级
     2 b = re.findall(r'www.(baidu|oldboy).com','www.baidu.com')
     3 print(b)
     4 
     5 # ?:取消()优先级
     6 c = re.findall(r'www.(?:baidu|oldboy).com','www.baidu.com')
     7 print(c)
     8 
     9 #切割
    10 ret = re.split('[ab]','github is a good websit')
    11 print(ret)
    12 
    13 ret = re.split('([ab])','github is a good websit')
    14 print(ret)
    15 
    16 #替换
    17 ret = re.sub('good','well','github is a good website')
    18 print(ret)
    19 ret = re.subn('g','G','github is a good website')
    20 print(ret)
    21 
    22 #预加载
    23 a = re.compile(r'anala')  # 正则中表示匹配结尾是什么什么
    24 print(a)
    25 ret = a.search('lexahanala')
    26 print(ret.group())
    27 
    28 #给组起名字
    29 obj = re.compile(r'alex(?P<name>d+)and(w)')
    30 res = obj.search("alex250andwusir38ritian2")
    31 print(res.group())
    32 # for el in res.group():
    33 #     print(el)
    34 print(res.group(2))
    35 print(res.group('name'))
    其他操作
     1 #豆瓣排行top250
     2 
     3 from urllib.request import urlopen
     4 import re
     5 
     6 #预加载正则表达式
     7 obj = re.compile(r'<div class="item">.*?<span class="title">(?P<name>.*?)</span>.*?导演: (?P<director>.*?)&nbsp;&nbsp;&nbsp;.*?<span class="rating_num" property="v:average">(?P<fen>.*?)</span>',re.S)
     8 #获取网页内容
     9 def getContent(url):
    10     content = urlopen(url).read().decode('utf-8')
    11     return content
    12 
    13 #解析内容
    14 def parseContent(content):
    15     it = obj.finditer(content)
    16     for el in it:
    17         yield {
    18             "电影名":el.group("name"),
    19             "导演": el.group('director'),
    20             "评分":el.group('fen')
    21         }
    22 
    23 for i in range(10):
    24     url = 'https://movie.douban.com/top250?start=%s&filter=' %(i*25)
    25     g = parseContent(getContent(url))
    26     f = open('douban.txt', mode='a', encoding='utf-8')
    27     for el in g :
    28         f.write(str(el)+'
    ')
    29     f.close()
    练习
  • 相关阅读:
    JavaScript Validator 报错
    JSP项目_Web路径_磁盘物理路径
    TreaponseHeader
    TrequestHeader
    HTML学习笔记1
    SQL文摘:DATE_TRUNC: A SQL Timestamp Function You Can Count On
    SQL文摘:Writing Subqueries in SQL
    Python文摘:Requests (Adavanced Usage)
    Python文摘:Requests
    Python文摘:More About Unicode in Python 2 and 3
  • 原文地址:https://www.cnblogs.com/zhang-yl/p/9974471.html
Copyright © 2011-2022 走看看