Python【r e】模块正则表达式[中]实战

news2024/11/26 2:32:36

正则表达式相关函数和符号用法:

#正则表达式

"""

.匹配任意某个字符

[.]与转义字符的作用一致,表示匹配.,配合 + ,[.]+,即匹配一次或则多次.

text = . 或则 text = ...

2.从头匹配或者从左往右匹配

re.match()

"""

import re

# text = 'suanliguicai'

# result = re.match('guicai',text)

# print(result.group())

#会报错的 AttributeError:“NoneType”对象没有属性“group”

#正确用法,match函数的作用,从匹配资料开头查看,有没有被match匹配到的内容,如果开头有那就提取出来,否则报错

# text = 'suanliguicai'

# result = re.match('guicai',text)

# print(result.group())

# search()函数:从左往右遍历,如果找到第一个符合要求的数据就会停止,即便有第二个第三个也不会被提取出来

#h很明显’i‘,有好几个

# text = 'suanliguicai'

# result = re.search('i+?',text)

# print(result.group())

#3. ^ 在正则表达式中表示 非,比如 \w在正则表达式中表示大小写字母从a - z,数字,制表符,空格,[^\w],表示除去以上说的那些,比如就可以匹配到符号

# text = "suanlil,ig.uicaicai"

# result = re.search('[^\w]+',text)

# print(result.group())

#4.^ 符号在中括号的外部,表示从那个字符开始匹配

# text = "suanlil,ig.uicaigcai"

#从a b c d ,.....x y z,随意那个字符开始,这里有个问题,就是所指的指定字符并不是真正意义的指定,必须是从左往右,第一个所出现的字符

#比如text中第一个字符是 s,或者是 su 或者suan,不能写成我想从 i 开始所以我在 [] 中写成 [i],这些显然会报错,所以能写成 [s]或者[su]或者[suan],这样是不是和match函数表达的效果一致的

# result = re.search('^[a-z]+',text)

# print(result.group())

#5. * 匹配一个或者多个字符

#问题:出现错误

# text = "suanliguicaiandcaicai"

# result = re.search('[cai]+?',text)

# print(result.group())

# $ 表示以xx为结尾 我想实现从中一个一个提取,拿到符合要求的数据,如果不符合会报错,但是这个小可爱,

# text_list = ['python123@163.com','python@qq.com123']

# for result in text_list:

# print(result)

# result1 = re.match('[\w]?@[a-z0-9]?\.com$',result)

# print(result1.group())

#6. | 或者 [|] 一个一个匹配

# text = 'https://weibo.com/'

# result = re.search('htt|http|https|file',text)

# print(result.group())

# (|)

# text = 'https://weibo.com/'

# result = re.search('(htt|http|https|file)+',text)

# print(result.group())

#[|] 至于 | 和 [|] 是不一样的,|表示在选择项中如果第一个能匹配到文件的开头那就拿出来,第一个不行那就换第二个,第二个不行那就拿第三个直到有效选项匹配完毕

#[|] 应该是单个字符去匹配,如果第一个选项中从第一个字符开始匹配最后一个字符都满足那就拿出来,哪怕有一个字符不满足就会换下一个选项

text = 'htttpts://weibo.com/'

# result = re.match('[t]+',text)

# result2 = re.search('[\w]+',text)

result2 = re.search('[t]+',text)

#正则表达式和字母匹配是有区别的,\w 可以包括任何字母,但是t只能表达t啊,t*应该匹配更多的t啊为啥不是,

# print(result.group())

# print(result2.group())

#经过测试,这个和函数有关系search表示是从数据中去匹配,肯定是从左往右,如果开头没有匹配上可以换一个字母,如果是match函数开头没有匹配的上那就挂了

"""

#贪婪模式中是符合我的要求的

text = 'pythonpythonand'

result = re.match('[python]+',text)

print(result.group())

#本次贪婪模式是不符合我的要求的

text = 'pythonpythonandpythonpythonpython'

result = re.compile('[python]+').findall(text)

print(result) # 为什么会返回n我也不理解

"""

fuck = """

python123@163.com

python@qq.com123

"""

# 可以这样把爬取的邮箱转换成字符串来用正则表达式提取

# print(type(fuck))

p = re.compile('[\w]+@[a-z0-9]+[.]com$').findall(fuck)

# print(type(p))

for result in p:

print(result)

# [\d\D],[\w\W]: 匹配所有的字符

# 转义字符 \ 在正则表达式\符号 返回符号原本的释义

#. 在utf-8符号表示 符号 点的含义,在正则表达式中表示任意字符,如果我们想要在正则表达式式让 . 恢复它原本符号点的释义,就应该在符号. 的前面加上\ ,\.或者[.]

pi = '******suanliguicai****'

result = re.search('\**[a-z]+\*+',pi)

print(result.group())

实战项目:(有注释地方大家可以放开试试,这是我用了两个函数实现同一效果)

我想获取的文字信息是:

import re import requests url = "https://so.gushiwen.cn/shiwenv_dc56160f5799.aspx" headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36' } response = requests.get(url,headers=headers) page_text = response.content.decode('utf-8') # print(page_text) #[\w\s] 表示包括大小写字母,和空格 # result = re.findall('<div class="cont">.*?<h1 style=[\w\W]+?>(.*?)</h1>.*?',page_text,re.DOTALL) print(result) result2 =re.search('<div class="cont">.*?<h1 style=[\w\W]+?>(.*?)</h1>.*?',response,re.DOTALL) print(result2.group())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/167891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA整合Docker,一键打包服务镜像与启动容器

尝试了IDEA整合Docker&#xff0c;坑有些多&#xff0c;但经过查阅资料都一一解决了&#xff0c;写了个案例&#xff0c;感觉这种方式确实要方便很多。下面来整理下步骤&#xff1a; 一、安装Docker 准备一台Linux&#xff0c;我这里用的是centos 7 mini 版&#xff0c;然后安…

内网穿透的概念及解决方案

1.什么是内网穿透 在外网的web请求可以转发到内网的本地服务 2.什么是内网&#xff1f;什么是外网&#xff1f; 内网(也叫局域网(Local Area Network&#xff0c;LAN))是在一个局部的地理范围内&#xff0c;一般可以是是几米内(比如家庭内网)&#xff0c;也可以是方圆几千米…

2023 年 10 大最佳 GIS 软件

有人说&#xff1a;一个人从1岁活到80岁很平凡&#xff0c;但如果从80岁倒着活&#xff0c;那么一半以上的人都可能不凡。 生活没有捷径&#xff0c;我们踩过的坑都成为了生活的经验&#xff0c;这些经验越早知道&#xff0c;你要走的弯路就会越少。 GIS 是一个分析地理相关性…

【算法】拓扑排序

目录1.概述2.代码实现3.应用本文参考&#xff1a; LABULADONG 的算法网站 1.概述 &#xff08;1&#xff09;拓扑排序 (Topological Sort) 是指将有向无环图 G (V, E) 中所有顶点排成一个线性序列&#xff0c;使得图中任意一对顶点 u 和 v&#xff0c;若边<u, v> ∈ E(…

esp32 使用u8g2图形库 IIC驱动OLED

简介&#xff1a;使用U8g2库进行OLED的显示十分简单&#xff0c;首先要包含两个库&#xff0c;U8g2lib和Wire&#xff0c;后者是IIC通信需要用。对于IIC接口的OLED&#xff0c;需要在程序中指定一下引脚的接口定义&#xff0c;如果是SPI接口&#xff0c;可以参考U8g2库自带例程…

【Leetcode】NC31 第一个只出现一次的字符(牛客网)、面试题 01.01. 判定字符是否唯一

作者&#xff1a;一个喜欢猫咪的的程序员 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 NC31 第一个只出现一次的字符 第一个只出现一次的字符_牛客题霸_牛客网【牛…

数据结构与算法(三)——顺序查找和二分查找

什么是查找 在一些数据元素中&#xff0c;通过一定的方法找出与给定关键字相同的数据元素的过程。 什么是列表查找 也叫线性表查找&#xff0c;从列表中查找指定元素 列表查找是一种算法&#xff0c;对应的自然就有输入和输出&#xff1a; 输入&#xff1a;列表、待查找元素…

【实际开发08】- Controller 层处理入参 , 可避免进去 impl 层

目录 1. 增 / 删 / 改 - 记录日志 , 查询不记录日志 2. 第一批次 : 参数校验 ( id、id1 id2 、&#xff1f;) 3. 增 / 改 dto 判空 , 实体类层 ( entity ) 进行处理 4. 通用修改 的 impl 层可供 ( status、普通 ) 使用 5. 入参优先级 : Json > Map > Javabean 1. …

终于有人将Session和cookie讲明白了!一节课彻底搞懂

1 引出session cookie session与cookie属于一种会话控制技术。常用在身份识别&#xff0c;登录验证&#xff0c;数据传输等。举个例子&#xff0c;就像我们去超市买东西结账的时候&#xff0c;我们要拿出我们的会员卡才会获取优惠。这时候&#xff0c;我们怎么识别这个会员卡真…

软考那些事儿,看这一篇就够了!

软考7个常见问题解答一、报考条件凡遵守中华人民共和国宪法和各项法律&#xff0c;恪守职业道德&#xff0c;具有一定计算机技术应用能力的人员&#xff0c;均可根据本人情况&#xff0c;报名参加相应专业类别、级别的考试。因此&#xff0c;计算机软件资格考试报名条件不设学历…

ITIL 问题管理综合指南

什么是ITIL问题管理 问题是多个事件的原因或潜在原因。影响许多用户的重大事件或重复发生的事件可能会出现问题。此外&#xff0c;可以在基础设施诊断系统中识别问题之前 用户会受到影响。 事件会阻碍业务生产力&#xff0c;提供快速解决方案有助于确保业务运营的无缝连续性。…

第四章SpringFramework之Ioc

文章目录IoC思想认识什么叫依赖/耦合控制反转和依赖注入的理解IoC&#xff1a;Inversion of Control&#xff0c;控制反转。DI&#xff1a;Dependency Injection&#xff0c;翻译过来是依赖注入。为什么需要这样齿轮的例子来突出Ioc的重要IOC容器在Spring中的实现Spring 提供了…

剑指 Offer 36. 二叉搜索树与双向链表

剑指 Offer 36. 二叉搜索树与双向链表 难度中等619 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点&#xff0c;只能调整树中节点指针的指向。 为了让您更好地理解问题&#xff0c;以下面的二叉搜索树为例&#xff1a…

【翻车现场】初读《编程之美》就想秀一下,结果还翻车了

文章目录 一、前言 二、我的思路 三、Code 四、翻车现场 五、后续问题 一、前言 ———如何写一个短小的程序&#xff0c;让 Windows 的任务管理器显示CPU的占用率为50%? 这道有趣的面试题我是这两天从《编程之美》电子版中看到的&#xff0c;看意思就是邹老师在微软对一…

LabVIEW写入可快速加载的TDMS文件

LabVIEW写入可快速加载的TDMS文件TDMS文件格式的设计目的是在尽可能快地读写数据的同时仍保持足够的灵活性来适应采集过程中通道数量和采样率的变化。 但是数据读写速度快的文件未必可快速加载。 TDMS文件是一个完全的二进制文件&#xff0c;由多个部分数据段组成&#xff0c;在…

多线程~实现一个自己的线程池,以及基于单例模式的线程池

目录 1.线程池的概念 2.线程池的实现 3.基于单例模式的线程池 &#xff08;1&#xff09;.单例模式的概念 &#xff08;2&#xff09;.基于单例模式的线程池 1.线程池的概念 池化技术本质上都是为了提高效率。线程池也是同理&#xff0c;提前准备好一些线程&#xff0c;用…

Lesson 1. 线性回归模型的一般实现形式

文章目录一、线性回归模型建模准备1. 数据准备2. 模型准备二、线性回归模型训练1. 模型训练的本质&#xff1a;有方向的参数调整1.1 模型训练与模型参数调整1.2 模型评估指标与损失函数1.3 损失函数与参数求解2. 利用最优化方法求解损失函数2.1 损失函数的求解2.2 图形展示损失…

【DevOps实战|基于Jenkins与Gitlab构建企业级持续集成环境系统】(更新中未完成)

目录 一、DevOps简介 二、CI/CD简介 1、代码部署的最基本流程 2、软件开发生命周期 3、持续集成整体流程 三、Git简介 1、GitHub与Gitlab区别 四、基于Jenkins与Gitlab构建持续集成环境系统 1、环境说明 2、安装gitlab 1&#xff09;配置邮件报警 一、DevOps简介 De…

目标检测的新范式:Towards Open World Object Detection

论文题目&#xff1a;Towards Open World Object Detection 1 摘要 人类有一种识别其环境中未知物体实例的自然本能(natural instinct)。当这些未知的实例最终获得相应的知识时&#xff0c;对它们的内在好奇心有助于了解它们。这促使我们提出一种新的计算机视觉问题称为&…

Week 11

洛谷P1796 汤姆斯的天堂梦 题目描述 汤姆斯生活在一个等级为 000 的星球上。那里的环境极其恶劣&#xff0c;每天 121212 小时的工作和成堆的垃圾让人忍无可忍。他向往着等级为 NNN 的星球上天堂般的生活。 有一些航班将人从低等级的星球送上高一级的星球&#xff0c;有时需…