寒假学习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 匹配的字符串。

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

原文地址:https://www.cnblogs.com/KYin/p/12289290.html