zoukankan      html  css  js  c++  java
  • 寒假学习17

    昨天爬取了丁香园的实时更新的动态信息,但是里面有好多对项目无关的信息(如下图),所以就要进行数据的清洗,

    想到了python的正则表达式,就对正则表达式进行了学习,现进行如下总结:

    首先,python中的正则表达式大致分为以下几部分:

    • 元字符
    • 模式
    • 函数
    • re 内置对象用法
    • 分组用法
    • 环视用法

    一、元字符 (个人感觉常用到的)

    1. .                    匹配任意字符(不包括换行符)
    2. ^                   匹配开始位置,多行模式下匹配每一行的开始
    3. $                  匹配结束位置,多行模式下匹配每一行的结束
    4. *                   匹配前一个元字符0到多次
    5. +                  匹配前一个元字符1到多次
    6. ?                  匹配前一个元字符0到1次
    7. {m,n}            匹配前一个元字符m到n次
    8. \                  转义字符,跟在其后的字符将失去作为特殊元字符的含义,例如\.只能匹配.,不能再匹配任意字符
    9. []                  字符集,一个字符的集合,可匹配其中任意一个字符
    10. |                   逻辑表达式 或 ,比如 a|b 代表可匹配 a 或者 b
    11. (...)               分组,默认为捕获,即被分组的内容可以被单独取出,默认每个分组有个索引,从 1 开始,按照"("的顺序决定索引值
    12. d                 匹配一个数字, 相当于 [0-9]
    13. D                 匹配非数字,相当于 [^0-9]
    14. w                 匹配数字、字母、下划线中任意一个字符, 相当于 [a-zA-Z0-9_]
    15. W                匹配非数字、字母、下划线中的任意字符,相当于 [^a-zA-Z0-9_]

    二、模式(我感觉常用到的)

    1. I    IGNORECASE, 忽略大小写的匹配模式
      1 str = 'I Love China!'
      2 
      3 regex = re.compile("i love china!", re.I)
      4 print regex.match(str).group()
      5 #output> 'I Love China'
    2. S   DOTALL,此模式下 '.' 的匹配不受限制,可匹配任何字符,包括换行符
    3. X    VERBOSE,冗余模式, 此模式忽略正则表达式中的空白和#号的注释,例如写一个匹配邮箱的正则表达式
      1 email = re.compile("[w+.]+@[a-zA-Zd]+.(com|cn)")
      2 
      3 email = re.compile("""[w+.]+  # 匹配@符前的部分
      4                             @                 # @符
      5                             [a-zA-Zd]+  # 邮箱类别
      6                             .(com|cn)    # 邮箱后缀  """, re.X)
      7 # 上面两种表达式效果相同

    三、函数(常用的)

    1. re.match函数,re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none,用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

    2. re.search方法,re.search 扫描整个字符串并返回第一个成功的匹配,用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

    3. 上述二者的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
    4. findall,在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。(感觉用的最多)

    5. re.compile 函数,compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。

    四、正则表达式对象

    1. re.RegexObject

      re.compile() 返回 RegexObject 对象。

    2. re.MatchObject
    • start() 返回匹配开始的位置
    • end() 返回匹配结束的位置
    • span() 返回一个元组包含匹配 (开始,结束) 的位置
    • group() 返回被 RE 匹配的字符串。

    这就是正则表达式的学习情况,但是最后的结果不尽人意,有好多的数据无法清洗出来,所以决定更换数据源,在进行爬取

  • 相关阅读:
    人脸识别算法初次了解
    Linux守护进程的编程实现
    Groovy新手教程
    Matlab画图-非常具体,非常全面
    拓扑排序
    Ubuntu下很给力的下载工具
    NYOJ-289 苹果
    使用PHPExcel导入导出excel格式文件
    Visual Studio 2010 中的 Web 开发
    mysql 加入�列,改动列,删除列。
  • 原文地址:https://www.cnblogs.com/KYin/p/12289290.html
Copyright © 2011-2022 走看看