python高阶-正则表达式、迭代器、生成器

欢迎观看、欢迎指正、共同学习

爬虫

import requests
response = requests.get("httpS://baijiahao.baidu.com")
print(reponse)
print('---------------')
print(reponse.text)
print('---------------')
print(reponse.content)
print('---------------')
print(reponse.content.decode())

正则表达式

re模块

三步:
	1、导包
	2、使用match方法进行匹配操作
	3、如果数据匹配成功,使用group方法来提取数据
三种匹配操作:
	1、使用match进行匹配----result.group()
		注意:match只能从开头匹配
	2、使用search进行匹配----result.group()
		注意:search可以全文查找,但是只能返回匹配的第一个
	3、使用findall进行匹配----返回列表
		注意:findall可以全文搜索,并且可以返回所有匹配成功的结果

正则表达式匹配单个字符

.:匹配任意1个字符,除了\n换行符
[]:匹配括号中的任意一个字符
\d:匹配任意数字
\D:匹配任意非数字
\w:匹配任意字母数字下划线
\W:匹配任意特殊字符
\s:匹配任意空白字符 空格 \t制表符 \n换行符
\S:匹配任意非空白字符

正则表达式匹配多个字符

*:匹配前一个字符出现0次或者多次----次数>=0(没有内容也可以匹配)
+:匹配前一个字符出现1次或者多次----次数>=1(必须要有内容)
?:匹配前一个字符出现0次或者1次----次数=0 或者 次数=1
{x}:匹配前一个字符出现x次----次数=x
{x,y}:匹配前一个字符出现x到y次----次数>=x 或者 次数<=y

正则表达式匹配开头和结尾

^:匹配以什么开头
$:匹配以什么结尾
注意:两个经常一起配合来限定中间内容个数,多了就报错

正则表达式提取分组内容

(xy):把括号中的x和y作为一个整体分组
(x|y):把括号中的x或者y作为一个分组
\组号 :注意:每个()分组后自动产生一个从1开始的编号,\编号就能获取到对应分组内容
注意:\本身有特殊含义,所以要多加一个转移符号
注意:分组情况下match匹配成功,也是返回所有内容
注意:
	1、1个分组情况下findall自动把本次匹配成功的内容放到列表中返回
	2、多个分组情况下findall自动把本次匹配成功的多个元组内容封装成元组再放到列表中返回

补充

贪婪模式:.匹配成功的前提下,尽可能多的匹配----.*和.+
非贪婪模式:匹配成功的前提下,尽可能少的匹配----.*?和.+?
re.I忽略大小写
re.S匹配换行符

迭代器和生成器

迭代器

定义:用于在数据集合中逐个访问元素
实现了 __iter__() 和 __next__() 方法的对象,使得可以逐步遍历它的元素
特点:
    1、需要显式地实现 __iter__() 和 __next__() 方法。
    2、迭代器需要自己管理迭代的状态,包括当前位置和结束条件。
    3、内存使用取决于迭代器的实现,通常是惰性计算(即按需生成数据。
注意: 迭代器是惰性的, 只有在需要时才计算, 因此可以无限迭代下去
注意: 用next获取下一个值有弊端容易越界报错
# 自定义迭代器Iterator类
class my_range:
    def __init__(self, start, end, step=1):
        self.current = start
        self.end = end
        self.step = step

    def __iter__(self):
        return self

    def __next__(self):
        if self.current >= self.end:
            raise StopIteration
        else:
            value = self.current
            self.current += self.step
            return value

r = my_range(1, 5)
print(next(r))
print(next(r))
print(next(r))
print(next(r))
# print(next(r)) # 报错Traceback (most recent call last):
print("-----------------------------------------------")
for i in my_range(1, 5):
    print(i)

print("-----------------------------------------------")
for i in range(1, 5):
    print(i)

生成器

定义:程序员制定的规则循环生成数据,当条件不成立时则生成数据结束。
作用:可节约大量的内存
创建生成器的方式:
	1、生成器推导式
	2、yield关键字
yield关键字作用
	1、将yield后面的值返回
	2、在yield中阻塞
#生成器
from collections.abc import Iterator
# 定义生成器函数
def get_num():
    print('生成1')
    yield 1
    print('生成2')
    yield 2
    print('生成3')
    yield 3
# 调用生成器函数
gen = get_num()
# 验证生成器函数是否是迭代器对象
print(isinstance(gen, Iterator))
print('-----------------')
# 注意: 迭代器是惰性的, 只有在需要时才计算, 因此可以无限迭代下去
print(next(gen))
print(next(gen))
print(next(gen))
print('-----------------')
for i in gen:
    print(i)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值