zoukankan      html  css  js  c++  java
  • python正则表达式(re使用)

    python正则表达式(re模块)

      跟之前在js中所见到的正则表达式是类似的

    一:re的常用操作符:

    操作符说明实例
    . 表示单个字符  
    [ ] 字符集,对单个字符给出取值范围 [abc]表示abc [a-z]不爱告诉a到z单个字符
    [ ^ ] 非字符集,对单个字符给出排除范围 [^abc]表示非a或非b或非c的单个字符
    * 前一个字符0次货无限次扩展 abc*表示ab、abc、abcc、abccc
    + 前一个字符1次货无限次扩展 abc+表示abc、abcc、abccc
    前一个字符0次货1次扩展 abc?表示ab、abc
    | 左右表达式任意一个 abc|def表示abc、def
    {m} 扩展前一个字符m次 ab{2}c表示abbc
    {m,n} 扩展前一个字符m到n次 abP{1,2}表示abc、abbc
    ^ 匹配字符串开头 ^abc表示abc且在一个字符串的开头
    $ 匹配字符串结尾 abc$表示abc且在一个字符串的结尾
    () 分组标记,内部职能使用|操作符 (abc)表示abc,(abc|def)表示abc、def
    d 数字,等价于【0-9】  
    w 单词字符,等价于【A-Za-z0-9_】  

     

    二:re库的主要功能函数:

    函数说明
    re.search() 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
    re.findall() 搜索字符串,以列表类型返回全部能匹配的子串
    re.match() 从一个字符串的开始位置起匹配正则表达式,返回match对象
    re.split() 将一个字符串按照正则表达式匹配进行分割,返回列表类型
    re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每一个迭代元素是match对象
    re.sub() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

     

      re库中包含的一些可选标志修饰符来控制匹配的模式

    修饰描述
    re.I 是匹配对大小写不敏感
    re.L 做本地化识别(locale-aware)
    re.M 多行匹配,映像^和$
    re.S 使.匹配包括换行再被的所有字符
    re.U 根据Unicode字符集解析字符,这个标志映像w,W,,B
    re.X 该标志通过给予更多灵活的格式以便将正则表达式写的更易于理解

     

    三:re使用格式

    import re
    pat=re.compile("AA")    #此处的AA,是正则表达式,用来验证其他字符串
    m=pat.search("AABCD")   #search字符串被校验的内容
    #输出结果会显示查询到一个匹配的位置
    #直接去进行匹配:
    m=re.search("asd","AAasd")#前面是规则,后面是进行匹对的对象
    print(m)
    ​
    #使用findall匹配:
    print(re.findall("[A-Z]"),"asffsaOGUGFU")#输出多个单个字符
    print(re.findall("[A-Z]+"),"asffsaOGUGFU")#输出多个多字符串
    #sub替换
    print(re,sub("a","A","abcdasd"))    #找到a用A替换,在第三个字符串查找
    #r(去除转义的影响),建议在正则表达式中,被比较的字符串前面加上一个r
    a=r"aabd-"
    print(a)

     

    四:使用re逐一解析数据:

      1.从源码中获取详细字符串片段:

    import re
    findLink=re.compile(r'<a href="(.*?)">')
    #<img alt="肖申克的救赎" class="" src="http://img3.douban.com/view/photo/s_radio">
    findImgSrc=re.compile(r'<img.*src="(.*?)"',re.S)#re.S忽略换行符
    #影片片名
    findTitle=re.complie(r'<spam class="title">(.*)</span>)
    #影片评分
    findRating=,,,,,,,,,,,,,,,,,,,,,,
    #获取到页面数据并保存到html中
    html=askURL(url)
    ​
    #注意解析数据:
    soup=BeautifulSoup(html,"html.parse")
    for item in soup.find_all('div',class_="item"): #找到符合要求的字符串,形成列表
        data=[] #保存一部电影的所有信息
        item=str(item)
        #获取详情信息
        Link=re.findall(findLink,item)[0]#注意:这里使用findall是吧findLink中正则表达式在item中查找并将其赋值给Link

     

      2.标签解析:(承接上面的内容)

    data=[] #保存一部电影的所有信息 
        Link=re.findall(findLink,item)[0]
        data.append(Link)
        
        #如果遇到了多个数据的返回对象;
        title=re.findall(findTitle,item)#标题可能会有中文名和英文名
        if(len(titles)==2):
            ctitle=titles[0]
            data.append(ctitle)
            otitle=titles[1].replace("/"."")#去掉无关符号,去掉/符号
            data.append(otitle)
        else:
            data.append(titles[0])
            data.append(' ')#外国名字留空
        
        
        #同时也可以对用re提取到的字符串进行替换或者增删改查
        bd=re.findall(findBd,item[0])
        bd=re.sub('<br(s+)?/>(s+)?',"",bd)    #去掉<br/>
        bd=re.sub('/'," ",bd)#替换/
        data.append(bd.stri())#去掉前后空格之后的内容
        #以上这些都是往一个data电影信息列表中加入
        
        #想要得到多个电影信息,使用for循环,然后放到datalist中就好了

     

  • 相关阅读:
    1. while循环(当循环) 2. do{}while()循环 3. switch cose(多选一) 例子:当选循环下求百鸡百钱 用 switch cose人机剪刀石头布
    JS。 问题类型:穷举,迭代。两个关键词:break和continue
    for循环计算游戏通关分数
    36抽8 模拟抽奖
    冒泡排序
    折纸---珠穆朗玛问题----简单for 循环
    水仙花数------"水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。(for循环的嵌套)
    九九乘法表---for循环的嵌套
    百鸡百钱===百马百担====for循环嵌套
    控制台输入年龄,根据年龄输出不同的提示 ------if……else if ……else 语句
  • 原文地址:https://www.cnblogs.com/instead-everyone/p/13766888.html
Copyright © 2011-2022 走看看