正则表达式和BeautifulSoup

news2025/1/13 13:19:40

文章目录

  • 1、正则表达式介绍
  • 2、正则表达式和BeautifulSoup
  • 3、获取属性
  • 4、Lambda表达式

1、正则表达式介绍

  正则表达式是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。它描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。

(1)常用的正则表达式符号:

符号含义例子匹配结果
*匹配前面的字符、子表达式或括号里的字符0次或多次abaaaaaaa, aaabbbbb, bbbbb
+匹配前面的字符、子表达式或括号里的字符至少1次a+b+aaaaaab, aaabbbb, abbbbb
[ ]匹配中括号里的任意一个字符(相当于“任选一个”)[A-Z]*APPLE, CAPITALS
( )表达式编组(在正则表达式的规则里编组会优先运行)(ab)aaabab, abaaab, ababaaaab
{m, n}匹配前面的字符、子表达式或括号里的字符m到n次(包括m或n)a{2, 3}b{2, 3}aabb, aabbb, aaabbb
[^]匹配任意一个不在中括号的字符[^A-Z]*apple, lowercase
I匹配任意一个由竖线分割的字符、子表达式b(ai
.匹配除换行符(\n、\r)之外的任意单个字符b.dbad, b%d, b d
^匹配输入字符串的开始位置^aapple, asdf, a
\转义字符(把特殊含义的字符转换成字面形式).\I\.I\
$匹配输入字符串的结束位置[A-Z][a-z]$ABCabc, zzzyx, Bob
?!“不包含”。这个奇怪的组合通常放在字符或正则表达式前面,表示字符不能出现在目标字符串里。这个符号比较难用,毕竟字符通常会在字符串的不同部位出现。如果要在整个字符串中彻底排除某个字符,就加上^和$符号^((?![A-Z]).)*$no-caps-here, $ymb0ls, a4e f!ne

(2)经典应用-识别邮箱:

规则正则表达式
1.邮箱地址的第一部分至少包括一种内容:大写字母,小写字母、数字0-9、点号(.)、加号(+)或下划线(_)[A-Za-z0-9._+]+:这个正则表达式简写写的非常智慧。例如,它用“A-Z”表示“A-Z中的任意大写字母”。把所有可能的序列和符号放在中括号(不是小括号)里表示 “可以是方括号中的任何一个符号”。要注意后面的加号,它表示 “这些符号都可以出现多次,但至少要出现1次”
2.之后,邮箱地址会包含一个@符号@:这个符号很简单:@符号必须出现在中间位置,并且只能出现1次
3.在符合 @之后,邮箱地址还必须至少包含一个大写或小写字母[A-Za-z]+:可能只在域名的前半部分、符号 @ 后面用字母。而且,至少要有一个字符
4. 之后跟一个点号(.).:在域名前必须有一个点号(.)。退格在这里用作转义字符
5. 最后邮箱地址用 com、org、 edu、net结尾(实际上,顶级域名有很多种可能,但是作为示例演示这4个后缀够用了)(comIorgIeduInet):这样列出了后半部分邮箱地址中可能出现在点号之后的字母序列

完整的表达式:[A-Za-z0-9\._+]+@[A-Za-z]+\.(com|org|edu|net)

2、正则表达式和BeautifulSoup

在这里插入图片描述
提取页面的图片链接:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re

html = urlopen('http://pythonscraping.com/pages/page3.html')
bs = BeautifulSoup(html.read(), 'html.parser')

images = bs.find_all('img', {'src': re.compile('\.\.\/img\/gifts\/img.*\.jpg')})

for image in images:
    print(image['src'])

# ../img/gifts/img1.jpg
# ../img/gifts/img2.jpg
# ../img/gifts/img3.jpg
# ../img/gifts/img4.jpg
# ../img/gifts/img6.jpg

3、获取属性

对于一个标签对象,可以用下面的代码获取它的全部属性:
myTag.attrs

要注意这行代码返回的是一个Python字典对象,可以轻松获取和操作这些属性。比如要获取图片的源位置src,可以用下面这行代码:
myImgTag.attrs['src']

from urllib.request import urlopen
from bs4 import BeautifulSoup

html = urlopen('http://pythonscraping.com/pages/page3.html')
bs = BeautifulSoup(html.read(), 'html.parser')

tr = bs.find('tr', {'id': 'gift2'})
print(tr.attrs)
print(tr['id'])
print(tr['class'])

# {'id': 'gift2', 'class': ['gift']}
# gift2
# ['gift']

4、Lambda表达式

  Lambda表达式本质上就是一个函数,可以作为变量传入两亿个函数;也就是说,一个函数不是定义成f(x, y),而是可以定义成f(g(x), h(y))的形式。

  BeautifulSoup允许我们把特定类型的函数作为参数传入find_all函数。唯一的限制条件就是这些函数必须把一个标签对象作为参数并且返回布尔类型的结果。BeautifulSoup用这个函数来评估它遇到的每个标签对象,最后把评估结果为“真”的标签保留,把其他标签剔除。

如,下面的代码就是获取有两个属性的所有标签:

bs.find_all(lambda tag : len(tag.attrs) == 2)

这里,作为参数传入的函数是len(tag.attrs) == 2。当该参数为真时,find_all函数将返回tag。即找出带有两个属性的所有标签。

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re

html = urlopen('http://pythonscraping.com/pages/page3.html')
bs = BeautifulSoup(html.read(), 'html.parser')

print(bs.find_all(lambda tag : tag.get_text() == 'Or maybe he\'s only resting?'))
print(bs.find_all(text='Or maybe he\'s only resting?'))

# [<span class="excitingNote">Or maybe he's only resting?</span>]
# ["Or maybe he's only resting?"]

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

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

相关文章

​Nature |HiFi宏基因组助力挖掘海洋“新”微生物组

近期在《Nature》发表的一篇研究论文中&#xff0c;表述了如何在罕见的微生物类群和环境中研究未知的酶和天然产物&#xff0c;研究突出了微生物组学在深入挖掘天然产物合成与酶学机制中的关键作用&#xff0c;对海洋生态、进化、生物技术与天然产物等领域的研究具有重要意义。…

基于Java+Vue前后端分离乐购游戏商城系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

制造企业可以通过数字工厂管理系统降低采购成本吗

制造企业可以通过数字工厂管理系统降低采购成本。制造业数字工厂系统是一种基于数字化技术的管理系统&#xff0c;可以帮助企业实现生产过程的数字化管理&#xff0c;提高生产效率和降低生产成本。下面具体介绍数字工厂管理系统如何降低制造企业的采购成本。 一、优化采购计划 …

【两个无穷大的数相加】

两个无穷大的数相加 两个无穷大的数相加&#xff0c;因为int有限,哪怕用long int也不可能够&#xff0c;用string存&#xff0c;用手工算数的方式从右往左一位一位加&#xff0c;满10就进一。这样不管有多长&#xff0c;都能算出结果。 最近在做QT项目&#xff0c;所以用c写的…

荔枝集团战队斩获 2023 Amazon DeepRacer自动驾驶赛车企业总决赛冠军

6月27日&#xff0c;2023 Amazon DeepRacer自动驾驶赛车企业总决赛在上海决出了最终结果&#xff0c;荔枝集团“状元红”战队与Cisco、德勤管理咨询、北京辛诺创新、神州泰岳、敦煌网等12支队伍的竞逐中&#xff0c;在两轮比赛中成绩遥遥领先&#xff0c;最终斩获桂冠。而今年年…

【LeetCode热题100】打卡第28天:不同的二叉搜索树验证二叉搜索树对称二叉树

文章目录 【LeetCode热题100】打卡第28天&#xff1a;不同的二叉搜索树&验证二叉搜索树&对称二叉树⛅前言 不同的二叉搜索树&#x1f512;题目&#x1f511;题解 验证二叉搜索树&#x1f512;题目&#x1f511;题解 对称二叉树&#x1f512;题目&#x1f511;题解 【Le…

真人手办店值得投资吗?

最近一两年有一种专为普通人设计的真人手办已经开始风靡&#xff0c;很多城市都有了真人手办店的身影&#xff0c;不少人的家里也摆上了属于自己的真人手办&#xff0c;这些手办可以说就是缩小版的我们自己。 除了消费者对这个新生事物有兴趣&#xff0c;许多想要创业的年轻人也…

Prophet算法框架趋势模型、季节模型原理详解与应用实践

本文是在ChatGPT协助下完成&#xff0c;提高了写作速度和效率。 1. 趋势模型 1.1. 趋势模型概述 当我们谈论Prophet中的趋势模型时&#xff0c;我们可以将其理解为描述时间序列数据中整体趋势的一种方式。趋势模型可以告诉我们数据随着时间的推移是如何变化的&#xff0c;是…

Kubernetes Pod篇

Pod基础概念&#xff1a; Pod是kubernetes中最小的资源管理组件&#xff0c;Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的&#xff0c;例如&#xff0c;用于管理Pod运行的S…

Linux--通配结构:*

功能&#xff1a; 与字符匹配后&#xff0c;作用时的作用对象是与字符匹配的文件 示例&#xff1a; ①显示以.c结尾的文件 ②显示file开头的文件③强制&#xff08;f&#xff09;递归&#xff08;r&#xff09;删除以.c结尾的文件 ④删除该目录下的一切文件及目录

联想小新Pro16怎么重装Win10系统?联想小新Pro16重装系统Win10教程

如果您是联想小新Pro16的用户&#xff0c;并且想要重装Win10系统&#xff0c;那么您来对地方了&#xff0c;无论是出于系统崩溃、性能下降还是个人需求改变的原因&#xff0c;重新安装操作系统可以帮助您恢复电脑的正常运行和提升使用体验。以下小编将为您分享联想小新Pro16重装…

Linux内核中常用的C语言技巧详解

概要 Linux内核采用的是GCC编译器&#xff0c;GCC编译器除了支持ANSI C&#xff0c;还支持GNU C。在Linux内核中&#xff0c;许多地方都使用了GNU C语言的扩展特性&#xff0c;如typeof、__attribute__、__aligned、__builtin_等&#xff0c;这些都是GNU C语言的特性。 typeof…

python中,数组 nums[:] 和nums有何区别?

leetcode中有一道题。题目为&#xff1a; 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改…

对于超过最大宽度的文字 想要换行怎么解决

对于超过最大宽度的文字,你可以 1、使用CSS中的word-break属性来换行: .rich-text {word-break: break-all; } break-all 属性允许在字符串内的任何地方换行。 2、使用overflow-wrap属性:break-word 也允许在字符串的任何地方换行。 .rich-text {overflow-wrap: break-wo…

Blazor 自定义可重用基础组件之 InputString(InputText)

为避免命名冲突&#xff0c;将InputText改名为InputString&#xff0c;其实内部类型就是string。 <div class"d-flex"><label class"control-label w-auto mt-2"><b>Lable</b></label><div style"width:InputWidth…

数智化时代,国企人力资源创新突破与高质量发展

二十大以来&#xff0c;在全面建设社会主义现代化背景下&#xff0c;以更大的力度、更切实的措施推动国资国企改革&#xff0c;推动世界一流企业由“培育”转入“加快建设”阶段。历经三年行动&#xff0c;国有企业改革已经取得了令人瞩目的成就。 今年以来&#xff0c;国务院国…

JAVA麻将胡牌算法深度解析

目录 麻将的基本概念 麻将牌的构成 麻将的碰&#xff0c;杠&#xff0c;吃&#xff0c;听&#xff0c;胡 麻将胡牌条件 胡牌算法简介 选将拆分法 算法数据结构 构建数据结构 数据结构使用 牌花色的获取 获取某一花色的牌值 获取某一张牌相邻牌 算法代码实现 基础代…

word另存为pdf失败的原因及处理方法

我们知道&#xff0c;Word可以通过另存为方式直接保存为PDF&#xff0c;其原理其实跟打印机打印差不多&#xff0c;PDF就是一台虚拟的打印机&#xff0c;但有些同学反映word另存为pdf失败&#xff0c;可能的原因是什么呢&#xff1f;又该如何处理呢&#xff1f; word另存为pdf…

【Java|多线程与高并发】CAS以及ABA问题

文章目录 1. 什么是CAS2. ABA问题3. ABA问题的解决 1. 什么是CAS CAS&#xff08;Compare and Swap,“比较和交换”&#xff09;是一种并发编程中常用的原子操作&#xff0c;用于解决多线程环境下的数据竞争和并发访问问题。 CAS操作包含三个操作数&#xff1a;内存位置&#x…

【Git】 Git初相识

文章目录 1. Git的必要性1.1 提出问题1.2 解决问题1.3 注意事项 2. Git的安装2.1 kali下的安装2.3 Windows下的安装 3. Git的配置 1. Git的必要性 1.1 提出问题 在我们的学习或者工作中&#xff0c;经常会遇到一些比较难搞的上司或者老师&#xff0c;让我们交上去的文档改了又…