正则表达式练习

练习1:

要求从斗鱼https://www.douyu.com/g_yz获取网页的源代码保存到本地为douyu.html文件,然后利用正则匹配出来所有的jgp图片,通过协程下载所有图片到本地

注:博客(正则表达式概述)中的“实战演练(爬斗鱼美女照片)”代码不能够实现多任务,以下代码进行优化:

# coding=utf-8
from gevent import monkey

monkey.patch_all()
import gevent
import urllib.request
import re


def download_img(img_name, img_url):
    """下载图片方法"""
    req = urllib.request.urlopen(img_url)
    img_content = req.read()

    with open(img_name, 'wb') as f:
        f.write(img_content)


def patch_img_url():
    """正则匹配出来所有的图片地址"""
    with open('./douyu.html', 'r', encoding='utf-8') as f:
        url_content = f.read()
    return re.findall(r"https://.+?\.jpg", url_content)


def main():
    img_list_spawn = []  # 定义空列表,保存所有图片下载的协程卵
    ret = patch_img_url()  # 获得所有的图片信息列表

    # 把正则匹配到的地址创建协程
    i = 1
    for img_url in ret:
        img_list_spawn.append(gevent.spawn(download_img, str(i) + '.jpg', img_url))
        i += 1
    gevent.joinall(img_list_spawn)  # joinall等待所有协程执行完毕


if __name__ == '__main__':
    main()

练习2:

要求从下面的字符串中提取出来所有有效的邮箱地址和手机号(标准的11位数字手机号):

abc@126.com;03711234567;123.com;13678909876;python@qq.com;1234567;cde@163com;13809098787;hello@qq.com

提示:(?:pattern) 非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。

这在使用或字符“(|)”来组合一个模式的各个部分时很有用。 

方案一:

import re


str = "abc@126.com;03711234567;123.com;13678909876;python@qq.com;1234567;cde@163com;13809098787;hello@qq.com"
ret = re.findall(r"(\w+?@(?:qq|163|126)\.com)", str, re.A)
ret_mobile = re.findall(r"1\d{10}", str)
ret.extend(ret_mobile)
print(ret)


# ret = re.findall(r"(\w+?@(?:\w+)\.com|1\d{10})", str, re.A)
# print(ret)

方案二:

import re

with open("Emile.txt", "rb") as f:
    content = f.read().decode("utf-8")

# 内容清洗
content = re.sub(r"\s", "", content)
# 用“;”将字符串切割成列表
ret = re.split(r";", content)
# print(ret)

# 循环匹配
for data in ret:
    r = re.match(r"([a-zA-Z0-9_]+@[0-9a-zA-Z]+\.[a-zA-Z]+$)|([1]\d{10}$)", data)
    if r:
        if r.group(1):
            print("邮箱为:" + r.group())
        else:
            print("手机号为:" + r.group())

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值