分享好友 最新动态首页 最新动态分类 切换频道
python-11(正则解析网页)
2024-12-26 15:53

正则表达式,又称规则表达式(Regular Expression,在代码中常简写为regex、regexp或RE,正则表达式描述了一种字符串匹配的模式(pattern,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

总之,正则表达式通常用来检索、替换符合规则的文本。

  • 原子 普通字符,如英文字符

  • 元字符有特殊功能的字符

一个正则表达式至少有一个原子组成

  • 匹配单个字符

正则字符含义.匹配任意一个字符,除了换行符[]匹配 [ ] 中列举的字符。例如:[abc]、[a-z]s匹配空白字符,即:空格、换行、Tab符S匹配任何非空白字符d匹配数字,等价于D匹配非数字,等价于w匹配字母数字下划线,等价于W匹配非字母数字下划线,等价于

  • 匹配多个字符

正则字符含义*匹配前一个字符出现0次或多次,即:可有可无+匹配前一个字符出现1次或多次,即:至少有一次?匹配前一个字符出现0次或1次,即:要么一次,要么没有{m}匹配前一个字符出现m次{m,n}匹配前一个字符出现从m到n次

  • 匹配开头结尾

正则字符含义^在[]外匹配字符串开头^在[]内取反$匹配字符串末尾

  • 匹配分组

正则字符含义|匹配左右任意一个表达式()将括号中字符作为一个分组 um引用分组num匹配到的字符串起别名定义:(正则表达式) 引用

# 1)匹配首字母大写的字符(注:后面字符任意,并且可有可无)
# 2)0-99的数字
# 3)匹配出:不是以4结尾的手机号码11位
# 4)匹配出:8到20位的密码,可以是大小写英文字母、数字、下划线
# 5)匹配出:163邮箱,且@符号之前有4到20位
# 注意:.在此处有特殊意义,需转义处理.
# 6)匹配出:匹配字符串,必须字母下划线开头(数字不行)

是Python标准库中的一个模块,用于进行正则表达式匹配和操作。正则表达式是一种强大的模式匹配工具,可以用于在字符串中进行搜索、替换和分割操作。

要使用模块,首先需要导入它

import re

模块提供了一系列函数和常量,用于处理正则表达式。

在Python中,可以使用模块来创建正则表达式对象并进行匹配、查找、替换等操作。模块提供了许多函数和方法,包括

  • :在字符串中搜索并返回第一个匹配的结果对象。可以指定可选的参数来修改匹配的行为。

  • :从字符串的开头开始匹配,如果匹配成功则返回结果对象,否则返回。

  • :返回所有与正则表达式匹配的非重叠结果的列表。

  • :使用替换字符串中与正则表达式匹配的部分。可选的参数用于指定最多替换次数。

其中,是正则表达式字符串,是要匹配的字符串,是用于控制正则表达式的匹配行为的标志,是替换字符串,是最多替换的次数。匹配对象是一个包含匹配的信息的特殊对象,可以用来获取匹配的子串、位置等信息。

注意,match和search的返回结果方法有

方法含义group()返回被re匹配的字符串start()返回匹配的开始位置end()返回匹配的结束位置span()返回一个元组包含匹配(开始,结束)的位置

案例一:电子邮箱验证

# qq邮箱验证
match = "d{4,10}@qq.com"
email = "529503476@qq.com"
​
m = re.match(match, email)
if m:
    print("有效的QQ邮箱")
else:
    print("无效的QQ邮箱")

案例二:findall和finditer查找字符串中所有匹配的子串

st = "aa123asd123asd134ada123"
# 注意:这里需要使用()进行分组处理
all = re.findall('(d+)', st)
print(all)
# finditer返回为迭代器,需要遍历
matchs = re.finditer(pattern,st)
for match in matchs:
    print(match.group())

案例三:search在字符串中查询第一个匹配的位置

st = "aa123asd123asd134ada123"
search = re.search('(d+)', st)
print(search)
print("返回被re匹配的字符串",search.group())
print("返回匹配的开始位置",search.start())
print("返回匹配的结束位置",search.end())
print("返回一个元组包含匹配(开始,结束)的位置",search.span())

案例四:使用sub实现正则替换

HA:被替换的对象

st字符串

count:替换前面2个符合的

st = "aa123asd123asd134ada123"
sub = re.sub('(d+)', 'HA', st, count=2)
print(sub)

在Python中,正则表达式(re)模块支持贪婪(greedy)和非贪婪(non-greedy)匹配模式。贪婪匹配尽可能匹配更多的字符,而非贪婪匹配尽可能匹配更少的字符。

在匹配字符后面添加?,匹配非贪婪模式。

使用RegexBuddy工具进行贪婪与非贪婪规则校验,待校验字符串如下

<img src="https://img.xx.a" title="美女图片"/>
<img src="http://img.xx.a" title="美女图片"/>
<img src="/img.xx.a" title="美女图片"/>

请使用正则验证img标签中的src属性,并结合贪婪与非贪婪

通过模块中的findall提取上述字符串中的src属性值,例如

# 贪婪与非贪婪
st = """
<img src="https://img.xx.a" title="美女图片"/>
<img src="http://img.xx.a" title="美女图片"/>
<img src="/img.xx.a" title="美女图片"/>
"""
# 通过re模块中的findall提取上述字符串中的src属性值
# 非贪婪
all = re.findall(r'src="(.+?)"', st)
print(all)
# 贪婪
all = re.findall(r'src="(.+)"', st)
print(all)

个人总结:贪婪模式会取到最后一个双引号,而非贪婪模式会在第一个双引号停止

正则字符串前面加上"r"表示:让正则中的“”不再具有转义功能。

这里采用的是某网站的地址进行的案例演示。

 

记得建一个大众点评文件夹

 
 
 

是一个流行的中文分词库,用于将中文文本按词语进行分割。它是基于统计方法和词频字典构建的字典分词模型。库提供了多种分词模式和功能,可以用于中文文本的分词、关键词提取等自然语言处理任务。

请先下载jieba库,该库下载比较慢,请耐心等待。

安装完成后,你可以在Python脚本中导入库

import jieba
  • 入门示例

import jieba
st = "我在梅溪湖洗脚按摩大保健"
words = jieba.cut(st)
print(list(words))
  • 加载自定义的词库

请先在当前python项目目录下创建cy.txt文本文件,并添加你所认为的词,例如:“梅溪湖”

import jieba
# 加载自定义的词库
jieba.load_userdict("cy.txt")
st = "我在梅溪湖洗脚按摩大保健"
words = jieba.cut(st)
print(list(words))
  • 匹配模式(精准和全模式):

import jieba
st = "我在岳麓山洗澡,做头发"
# 精准模式:把出现的词放到列表中
words = jieba.cut(st)
print(list(words))
# 全模式:把可能出现的词组,都放入列表
words = jieba.cut(st,cut_all=True)
print(list(words))

通过设定全模式匹配。

微博热搜地址:微博 热搜榜 今日热榜

操作步骤

  • 先通过模块爬取微博热搜中的所有网页内容

  • 通过模块中的查找所有与之匹配的结果

  • 针对结果使用逗号将匹配到的结果拼接起来,然后再使用库的全模式匹配

  • 筛选出符合条件的词条结果,并进行词频统计

最新文章
AI绘画新玩法:用AI工具轻松生成超逼真美女写真!
在这个数码科技飞速发展的时代,人工智能不仅改变了我们的生活方式,还影响了很多创意产业。想象一下,假如你可以通过简单的几步操作,生成一张高清、逼真的美女写真,那将是多么炫酷的事情!不论是用作社交媒体头像,还是为自己的创意项目
2023年微信小程序API 视频·打开编辑器
想让你的企业更好地从微信小程序中获益吗?微信小程序API 视频·打开编辑器功能可以帮助你实现!使用该功能,你可以轻松地编辑用户上传的视频内容以生成更有趣、更具吸引力的多媒体文件。以下是该功能的详细参数介绍。通过将参数传递给 wx.
12月13日房地产服务行业八大熊股一览
证券之星消息,12月13日,沪指报收3391.88,较前一交易日下跌2.01%。房地产服务行业整体表现较弱,较前一交易日下跌2.99%,2只个股上涨,8只个股下跌。个股表现方面,房地产服务行业当日领跌股为特发服务(300917),该股当日报收56.86,下
2024年腾讯云双十二大促即将落幕,抓住最后机会抢购云资源!
​​2024年腾讯云双十二大促即将落幕,抓住最后机会抢购云资源!双十二大促最后几天,都知道云产品每年都涨价,错过优惠不再有!腾讯云有优惠活动吗?2024年末腾讯云双十二大促活动,云服务器价格多少钱?2024年腾讯云12月轻量服务器多少钱
AI智能体走热,将如何改变生活?
‍  新华社北京9月30日电  新华社“新华视点”记者舒静、宋晨、吴文诩  学会搭建使用AI智能体后,自媒体运营者小米感觉就像多招了一名24小时给自己打工的“文案设计师”,1分钟就能生成10个爆款标题,“省心多了”。  AI智能体(AI
2024年12月14日AISL Harrow Chongqing 哈罗重庆校园开放日免费预约
重庆哈罗礼德学校(哈罗重庆)坐落于重庆市副省级新区(两江新区)两江大道,是一所配置为幼儿园到高中的全日制及寄宿制双语学校。学校传承英国哈罗公学始于1572年的全人教育理念,采用中西结合的创新课程与经典的英式教学法,旨在为西南地区的
2024年正版资料免费大全最新版本|词语释义解释落实
探索未来知识宝库:2024年正版资料免费大全最新版本的词语释义与落实解析随着科技的飞速发展和互联网的普及,知识的获取变得越来越便捷,在即将到来的2024年,我们预见一个崭新的知识世界,其中正版资料免费共享将成为主流趋势,本文将围绕
B2S设计_b2s泰国设计教程
摘要:B2S设计,b2s泰国设计教程,新片场素材小编康小涵B2S设计,b2s泰国设计教程相关内容整理,如果您对B2S设计,b2s泰国设计教程感兴趣欢迎访问免费阅读。B2S设计,b2s泰国设计教程一、B2S在线设计教程介绍昨日阿里巴巴集团旗下子公司阿里软
2000-3000元手机推荐排行榜 谁值得买一眼便知
,现在是每个人日常生活中必不可少的工具,已经完全成为每个人的生活必需品。而现在的手机品种繁多,选择困难。当我们想换手机时,肯定想选择一款性价比高、颜值高的、内存大的。如果你不差钱,那你直接买最贵的,不会有多大错。如果预算200
DOODUM智能指纹锁24小时故障报修统一客服热线-
随着科技的飞速发展,智能锁的应用逐渐普及至人们的日常生活中。DOODUM智能指纹锁凭借其高度的便捷性和安全性,成为市场上备受消费者青睐的品牌之一。为了更好地服务用户,满足用户需求,DOODUM智能指纹锁设立了24小时故障报修统一客服热线
相关文章
推荐文章
发表评论
0评