• 补充re模块


    Re模块

    Re.findall(正则表达式,要操作的字符串)

    显示所有的结果

    Re.search(正则表达式,要操作的字符串)

    显示只查到的第一个结果的索引值,并且通过ret.group取得值

    Ret = re.search(d+,dsafjhafj34345sdfadfa)

    If ret:

    Print(ret.group)

     

    Re.match(正则表达式,要操作的字符串)

    显示默认给正则表达式加一个^,相当于从头开始找第一个,

     

    Findall 找所有 返回列表

    Search  找第一个 返回一个结果集,通过.group取值,如果没有匹配到,返回None, .group报错

    Match  从头开始找第一个,返回一个结果集,通过.group取值,如果没有匹配到,返回None, .group报错

    Match可以被search替代

    re.search(^d+,dsafjhafj34345sdfadfa) == re.match(d+,dsafjhafj34345sdfadfa)

    补充:

    替换:

    re.sub(正则表达式,要替换的内容,要操作的字符串)  默认替换所有,可以写替换几个

     

    Ret = Re.sub(^d+,SB,dsafjhafj34345sdfadfa)

    Print(ret)  

     

    re.subn(正则表达式,要替换的内容,要操作的字符串)  默认替换所有,可以写替换几个

    Ret = Re.subn(^d+,SB,dsafjhafj34345sdfadfa)

    Print(ret)  #(dsafjhafj34345sdfadfa,1) 替换后的结果和替换了几次

    切割:

    Re.split(d+,jafa 3434fjflasjflja 3434jkjj4l3jk34j)

    Print(ret)  #按照正则表达式来切分字符串

     

    参数说明:

    参数 正则表达式 待匹配的字符串

    替换 正则       要替换的结果  待匹配的字符串

    Re.compile()

    对于一个经常被重用的正则表达式 我们可以先进行一次编译

    之后只要用到这个表达式直接拿出来用就行了

    这样做就节省了代码的执行 时间

    Par = re.compile(‘d+’)

    Print(par)

    Ret = par.findall(‘asdfaf33434afsadf’)

    Print(ret)

    Re.finditer()

    三个目标:

    1. 时间
    2. 空间
    3. 用户体验

    Ret = re.findall(‘d+’,’fd2324ff343adf45454’)

    Print(ret)

    Ret = re.finditer(‘d+’,’fd2324ff343adf45454’)

    For i in ret:   #得到结果集 ,用的时候才用.group取值

    Print(i.group())

    Par = re.compile(d+)  #节省了时间

    Ret =par.finditer(‘erre34343ffdfd454546v4n5nn4n3n4n5n43’)  #节省了空间

    总结:

    匹配:

    Findall

    Search   match 返回结果集 用.group取值

    字符串其他处理:

    替换 sub  subn

    切割 spilt

    进阶:

    节省空间 finditer 返回一个迭代器,迭代器里装的都是结果集,需要通过group取值

    Findall 配合分组使用 --->  findall 永远优先显示分组中的内容!!

    在分组里加入 ?: 就等于取消这个分组的优先级别

    节省时间 compile 能够提前编译一个正则表达式,当同一个正则需要多次被使用的时候,可以节省时间

    分组在正则表达式中发挥的作用

    分组在findall 当中默认会优先被显示出来

    如果不想有限,name在分组中添加(?:正则规则)表示取消这个规则的优先显示

    Import  re

    Ret = re.findall(‘>(w+)<’,r’<title>qqixng< itle>’)

    Print(ret)  # findall 永远优先显示分组中的内容!!

     在分组里加入 ?: 就等于取消这个分组的优先级别

    Split和分组,会保留被切掉的再分组中的内容

    Search 和分组

    在爬虫/数据清洗的过程中最常用的正则表达式的操作

    并不是把我要的内容正则写出来

    而是把整个页面都用正则描述下来,然后把我需要的内容放在分组里

    这样就能够取到我想要的内容了

    遇见分组:

    Findall  优先显示分组中的内容

    Spilt    保留被切掉的分组内的内容

    Search  可以通过组的索引取值

    取消分组的特殊行为 (?: 正则)

    分组命名:

    分组里添加 ?P<起的名字>就可以在 .group(‘起的名字’) 直接获取分组名字对应的内容

    特殊的需求

    HTML

    <h2>hello</h2>  前后都是标签 直接显示中间的内容

  • 相关阅读:
    Anders Hejlsberg 和 Erich Gamma
    node-webkit
    用户密码加密存储十问十答,一文说透密码安全存储
    Spring Security-- 验证码功能的实现
    BigDecimal 专题
    基于微信开发 专题
    unwrapThrowable
    Android PullToRefreshExpandableListView的点击事件
    Android The content of the adapter has changed but ListView did not receive a notification
    Android入门:广播发送者与广播接收者
  • 原文地址:https://www.cnblogs.com/zhangxiangning/p/10740545.html
Copyright © 2020-2023  润新知