• 慕课 爬虫学习 第三周 网络爬虫之实战


    第三周 网络爬虫之实战

    单元7:Re(正则表达式入门)

    正则表达式的概念

    regular expression regex RE

    优势:简洁,一行胜千言

    通用的字符串表达框架

    主要应用与 字符串 匹配中。

    正则表达式的语法

    常用操作符
    操作符 说明 实例
    . 表示任意单个字符
    [] 字符集,对单个字符给出取值范围 [abc]表示a、b、c,[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次; ab{1,2}c 表示 abc 或 abbc
    ^ 匹配字符串开头 ^abc 表示abc 且在一个字符串的开头
    $ 匹配字符串结尾 abc$ 表示abc且在一个字符串的结尾。
    () 分组标记,内部只能使用 | 操作符 (abc)表示abc,(abc|def)表示abc或def
    d 数字,等价于[0-9]
    w 单词字符,等价于[A-Za-z0-9_ ]

    Re库的基本使用

    python内置库,无需单独安装

    主要功能函数
    函数 说明
    re.search() 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
    re.match() 从一个字符串的开始位置匹配正则表达式,返回match对象
    re.findall() 搜索字符串,以列表类型返回全部能匹配的子串
    re.split() 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
    re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
    re.sub() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
    re.search
    #函数式用法,一次性操作
    
    import re
    match = re.search(r'[1-9]d{5}','BIT 100081')
    if match:
    	print(match.group(0))
    -------------------------------------------
    
    100081
    
    
    # 面向对象用法,编译后多次操作
    
    pat = re.compile(r'[1-9]d{5}')
    
    ret = pat.search('BIT 10081')
    
    
    re.match
    import re
    match = re.match(r'[1-9]d{5}','100081 BIT')
    if match:
    	print(match.group(0))
    -------------------------------------------
    
    100081
       
    
    re.findall
    import re
    
    ls = re.findall(r'[1-9]d{5}','100081BIT TUS100084')
    
    print(ls)
    
    --------------------------------------------------
    ['100081', '100084']
    
    
    re.split
    import re
    
    a = re.split(r'[1-9]d{5}','100081BIT TUS100084')
    
    print(a)
    
    ---
    ['', 'BIT TUS', '']
    
    
    
    import re
    
    a = re.split(r'[1-9]d{5}','100081BIT TUS100084',maxsplit=1)
    
    print(a)
    
    --------------------------
    ['', 'BIT TUS100084']
    
    
    re.finditer
    import re
    for m in re.finditer(r'[1-9]d{5}','100081BIT TUS100084'):
        if m:
            print(m.group(0))
    -----------------------------------
    
    100081
    100084
    
    re.sub
    import re
    print(re.sub(r'[1-9]d{5}','zipcode','BIT100086 TSU100084'))
    
    ------------------------------------
    
    BITzipcode TSUzipcode
    
    
    re.compile
    regex = re.compile(attern,flages =0)
    

    将正则表达式的字符串形式编译成正则表达式对象

    Re库的Match对象

    Re库的贪婪匹配和最小匹配

    默认采用贪婪模式,既输出匹配最长的字符串。
    import re
    
    match = re.search(r'PY.*N','PYANBNCNDN')
    print(match.group(0))
    
    ----------------------------------------------
    PYANBNCNDN
    
    最小匹配
    import re
    
    match = re.search(r'PY.*?N','PYANBNCNDN')  # 添加一个?号
    
    print(match.group(0))
    
    --------------------------------------------------
    PYAN
    
  • 相关阅读:
    玩家上线
    小退
    GS发包到MS
    share初始化
    3 水仙花数
    The left-hand side of an assignment must be a variable,代码中使用了中文的字符
    Mac Sublime Text 浏览器 设置快捷键 让html文件在浏览器打开
    2 质数求解
    1 斐波那契的兔子
    18 赛手的名单
  • 原文地址:https://www.cnblogs.com/chenfei2928/p/12711519.html
Copyright © 2020-2023  润新知