正则

一. 数据的分类

1. 结构化数据

  • 特点: 数据已行为单位,每一行数据表示一个实体.每一行数据的属性都是一样的.
  • 举例:关系型数据库中都 表就是结构化数据.
  • 处理方法:sql

2. 半结构花数据

  • 特点:结构化数据的另一种形式.他并不符合关系型数据的特点,不能用关系型模型来描述.但是这种数据包含相关标记,有用了分割语义元素以及字段进行分层的描述.
  • 因此也被成为描述结构
  • 举例: xml, html, json
  • 处理方法: 正则, xpath, jsonpath, css选择器.

3. 非结构化数据:

  • 特点: 没有固定结构的数据.
  • 举例: 文档, 图片, 音频, 视频.
  • 处理方法: 常用二进制形式来做整体保存.

二. json数据

1. json是什么语言的内容?

  • json是js语言中用来用字符串格式来保存对象和数组的一种数据结构.
  • json数据本质上是字符串.

2. js中数组和对象:

  • js的数组: var array = ['aaa', 'bb', 'cc'] —和Python列表对应
  • js的对象: var obj = {name: 'zhangsan', age: 10} —和Python字典对应.

3. json数据的解析方法:

  • json模块:
    • 对json字符串的操作:
      • json.loads(json_str)—>将已编码的 JSON 字符串解码为 Python 对象
      • json.dumps( python的list或者dict)—>将 Python 对象编码成 JSON 字符串
    • 对json文件的操作:
      • json.load(fp) —> 从json文件中读出json数据, 返回一个Python的list或者dict
      • json.dump(Python的list或者dict,fp)—> Python的list或者dict保存到fp所对应的文件中.

4. json的意义:

  • json作为数据格式进行传输,具有较高的效率
  • json不像xml那样具有严格的闭合标签,所以json作为数据传输的时候,他的数据有效占比比xml高很多.
  • 在相同流量下,json比xml作为数据传输,传输的数据更多.

三. 正则表达式

1. 元字符

  1. 匹配边界:
^行首
$行尾
  1. 重复次数
?0次或一次
*大于等于0次
+大于等于1次
{n,}大于等于n次
{n, m}大于等于n次,小于等于m次
{n}匹配n次
  1. 各种字符的表示
[]匹配括号中的一个字符,单字符
[abc]a或者b或者c
[a-z0-9]所有小写字母或数字
\d数字
\w数字字母下划线
\s空白字符: 换行符,制表符,空格
\b单词边界
.除换行符之外的任意字符

2. re模块的使用

Python中re模块是用来做正则处理的.
  1. re模块的使用步骤:

    1. 导包
    import re
    
    1. 将正则表达式编译成一个pattern对象
    pattern = re.complie(正则表达式, 匹配模式)
    
    1. 用pattern对象来使用相应的方法来匹配内容.
  2. pattern对象的方法:

    1. match方法: 默认从头开始,只匹配一次,返回一个match对象.

      pattern.match(匹配的目标字符串, start=0, end=-1) # 返回一个match对象
      
      match对象的属性:
      	match.group() # 获取匹配内容
      	match.span() # 获取匹配到值的范围
      	match.start() # 获取匹配到值的开始位置
      	match.end() # 获取匹配到值的结束位置
      	# 这些方法带参数0和不带参数是一样的,否则代表取分组
      	```
      
    2. search方法: 从任意位置开始匹配,只匹配一次,返回一个match对象

      pattern.search(匹配的目标字符串, start=0, end=-1) # 返回一个match对象
      
    3. findall方法: 全文匹配, 匹配多次,将每次匹配到的结果放到list中返回.

      pattern.findall(匹配的目标字符串, start=0, end=-1) # 返回一个list对象
      
    4. finditer方法: 全文匹配,匹配多次,返回一个迭代器.

      pattern.finditer(匹配的目标字符串, start=0, end=-1) # 返回一个迭代器
      
    5. split: 切分,按照正则所表示内容进行切分字符串,返回切分后的每个字符串,不包括正则部分

      pattern.split(要切分的字符串, 最大切分次数默认全部切割) # 返回一个列表
      
    6. sub方法: 用指定字符串替换正则表达式所匹配到的内容.

      pattern.sub(repl, 要替换的字符串, 最大替换次数)
      # rel: 用来替换的字符串
      # rel可以是字符串
      # 也可以是id引用分组
      # 也可以是函数,不过这个函数只接收一个match对象,并返回一个字符串
      # 该方法返回值是一个字符串
      
    7. 分组
      分组在正则表达式中使用()来表示,一个括号就是一个分组.
      分组的作用:

      1. 筛选特定内容
      2. 可以在同意个表达式中应用前面的分组:
        \1引用第一分组
      3. findall配合分组
        import re
        
        
        content = '<html><h1>正则表达式</h1></html>'
        p = re.compile(r'<(html)><(h1)>(.*)</\2></\1>')
        # print(p.search(content).group())
        print(p.findall(content))#[('html', 'h1', '正则表达式')]
        
    8. 贪婪非贪婪模式

      1. 贪婪和非贪婪的区别在于匹配内容的多少.
      2. 贪婪使用*来控制匹配次数的,正则默认是贪婪.
      3. 非贪婪使用?来控制
      4. 在表示数量控制的元字符后面加一个?,此时就表示这个数量控制符尽量匹配最小次数,也就是非贪婪
    9. 匹配模式

    re.s可以匹配换行符
    re.i忽略大小写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值