Python网络爬虫-re正则匹配数据

news/2024/11/14 22:03:34/

目录

前言

什么市正则表达式?

常见正则表达式元字符表

匹配字符

元字符

特定构造

Python常用的re正则匹配函数库 

1. re.match(pattern, string)

2. re.search(pattern, string)

3. re.findall(pattern, string)

4. re.finditer(pattern, string)

5. re.split(pattern, string)

6. re.sub(pattern, repl, string)

7. re.compile(pattern)

运用正则表达式生成随机密码案列


博主介绍:✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神,答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战,深受全网粉丝喜爱与支持✌有需要可以联系作者我哦!

🍅文末三连哦🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

前言

什么市正则表达式?

正则表达式(Regular Expression,通常简写为regex、regexp或RE)是一种强大的文本处理工具,它使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

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

例如,在Python中,可以使用re模块来使用正则表达式。正则表达式的主要应用包括:数据验证、搜索和替换操作等。例如,你可以使用正则表达式来验证一个字符串是否为有效的电子邮件地址,或者在一个大的文本文件中查找所有符合特定模式的字符串并进行替换。

正则表达式的优点在于其灵活性和强大性,能够处理各种复杂的文本匹配和替换任务。然而,其复杂性也使得学习和使用它具有一定的难度。需要掌握正则表达式的基本语法和常用元字符,才能有效地利用它来处理文本数据。

常见正则表达式元字符表

匹配字符

普通字符:大部分字符,如 ab12 等,匹配它们自身。

转义字符\ 用于引入特殊字符或转义序列。

  • \n:换行符
  • \t:制表符
  • \\:反斜杠字符本身
  • \r:回车符
  • \f:换页符
  • \v:垂直制表符
  • \uXXXX:其中 XXXX 是 4 位十六进制数,表示 Unicode 字符
  • \xHH:其中 HH 是 2 位十六进制数,表示字符
  1. 字符类[] 用于定义字符集。

    • [abc]:匹配 ab 或 c 中的任意一个字符
    • [^abc]:匹配除了 ab 或 c 之外的任意一个字符
    • [a-z]:匹配任意小写字母
    • [A-Z]:匹配任意大写字母
    • [0-9]:匹配任意数字
    • [a-zA-Z0-9]:匹配任意字母或数字

元字符

  1. .:匹配除了换行符之外的任意单个字符。

  2. *:匹配前面的子表达式零次或多次。

  3. +:匹配前面的子表达式一次或多次。

  4. ?:匹配前面的子表达式零次或一次。

  5. {n}:匹配前面的子表达式恰好 n 次。

  6. {n,}:匹配前面的子表达式至少 n 次。

  7. {n,m}:匹配前面的子表达式至少 n 次,但不超过 m 次。

  8. ^:匹配输入字符串的开始位置。

  9. $:匹配输入字符串的结束位置。

  10. \b:匹配一个单词边界。

  11. \B:匹配非单词边界。

  12. \d:匹配一个数字字符,等价于 [0-9]

  13. \D:匹配一个非数字字符,等价于 [^0-9]

  14. \w:匹配任何单词字符,等价于 [a-zA-Z0-9_]

  15. \W:匹配任何非单词字符,等价于 [^a-zA-Z0-9_]

  16. \s:匹配任何空白字符,包括空格、制表符、换页符等。

  17. \S:匹配任何非空白字符。

特定构造

分组与捕获() 用于将多个项组合成一个单元,并可以记住匹配的文本供以后引用。

  • \1\2, ...:引用之前捕获的分组。

选择| 用于分隔多个可能的匹配项。

  • a|b:匹配 a 或 b

非捕获分组(?:...) 匹配 ... 但不捕获匹配的文本。

前瞻断言

  • (?=...):正向前瞻断言,要求接下来的字符与 ... 匹配,但不消耗字符。
  • (?!...):负向前瞻断言,要求接下来的字符不与 ... 匹配。

后顾断言

  • (?<=...):正向后顾断言,要求前面的字符与 ... 匹配,但不消耗字符(注意:不是所有正则表达式引擎都支持后顾断言)。
  • (?<!...):负向后顾断言,要求前面的字符不与 ... 匹配。

回退引用\n,其中 n 是一个数字,用于引用之前捕获的分组内容。

量词修饰符

  • *?+?{n}?{n,}?{n,m}?:非贪婪量词,匹配尽可能少的字符。

边界匹配:除了 \b 和 \B,还有一些其他的边界匹配字符。

条件表达式:`(?(condition)yes-pattern|no-

Python常用的re正则匹配函数库 

Python 的 re 模块提供了对正则表达式(regular expressions)的支持,允许你进行文本匹配和搜索操作。以下是 re 模块中常用的一些函数和它们的功能: 

1. re.match(pattern, string)

  • 功能:从字符串的开头匹配模式。
  • 返回值:如果匹配成功,返回一个匹配对象;否则返回 None

python">import reresult = re.match(r'Hello', 'Hello, World!')
print(result.group())  # 输出: Hello

2. re.search(pattern, string)

  • 功能:在字符串中搜索模式,返回第一个匹配的对象。
  • 返回值:如果匹配成功,返回一个匹配对象;否则返回 None
python">result = re.search(r'World', 'Hello, World!')
print(result.group())  # 输出: World

3. re.findall(pattern, string)

  • 功能:查找字符串中所有匹配的子串。
  • 返回值:返回一个包含所有匹配子串的列表。
python">result = re.findall(r'\w+', 'Hello, World!')
print(result)  # 输出: ['Hello', 'World']

4. re.finditer(pattern, string)

  • 功能:查找字符串中所有匹配的子串,返回一个迭代器。
  • 返回值:返回一个迭代器,每次迭代返回一个匹配对象。
python">for match in re.finditer(r'\w+', 'Hello, World!'):print(match.group())  # 输出: Hello 和 World

5. re.split(pattern, string)

  • 功能:根据模式分割字符串。
  • 返回值:返回一个分割后的字符串列表。
python">result = re.split(r',\s*', 'Hello, World,Python,Programming')
print(result)  # 输出: ['Hello', 'World', 'Python', 'Programming']

6. re.sub(pattern, repl, string)

  • 功能:替换字符串中的匹配项。
  • 返回值:返回替换后的字符串。
python">result = re.sub(r'\s+', '-', 'Hello    World')
print(result)  # 输出: Hello-World

7. re.compile(pattern)

  • 功能:编译正则表达式,生成一个正则表达式对象。
  • 返回值:返回一个正则表达式对象,可以用于后续的匹配操作。
python">pattern = re.compile(r'\d+')
result = pattern.findall('The price is 20 dollars.')
print(result)  # 输出: ['20']

8. 匹配对象方法

  • match.group(): 返回匹配的字符串。
  • match.start(): 返回匹配的开始位置。
  • match.end(): 返回匹配的结束位置。
  • match.span(): 返回一个元组,包含匹配的 (开始, 结束) 位置。

这些只是 re 模块中常用的一些函数和方法。正则表达式在实际使用中非常强大,能够进行复杂的模式匹配和替换操作。不过,编写和理解复杂的正则表达式需要一些练习和经验。

运用正则表达式生成随机密码案列

re.compile(pattern) 函数用于编译正则表达式,生成一个正则表达式对象。这个对象可以用于后续的匹配操作。下面详细介绍该函数的参数、功能以及如何使用它来生成满足特定条件的密码。

 密码要求:

  • 至少一个数字:\d
  • 至少一个字母(大小写不限):[a-zA-Z]
  • 至少一个特殊符号(例如 !@#$%^&*()-_+= 等):[!@#$%^&*()\-_=+]
  • 密码长度至少8位:{8,}

根据条件组合在一起,我们得到的正则表达式为: 

pattern = r'^(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&*()\-_=+]).{8,}$'

解释一下这个正则表达式:

  • ^: 表示字符串的开始。
  • (?=.*\d): 表示后面跟着至少一个数字。
  • (?=.*[a-zA-Z]): 表示后面跟着至少一个字母。
  • (?=.*[!@#$%^&*()\-_=+]): 表示后面跟着至少一个特殊符号。
  • .{8,}: 表示任意字符,至少8位。
  • $: 表示字符串的结束。

接下来,我们使用 re.compile() 编译这个正则表达式,并使用 search() 方法来生成满足条件的密码。

  • random.choice(string.ascii_letters + string.digits + '!@#$%^&*()\-_=+') 用于生成随机字符。
  • pattern.search(password) 用于检查密码是否符合正则表达式。
  • generate_password() 函数将生成满足条件的密码,并返回该密码。

实现代码如下:

python">import re
import random
import stringdef generate_password():pattern = re.compile(r'^(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&*()\-_=+]).{8,}$')while True:# 生成随机密码,包含数字、字母和特殊符号password = ''.join(random.choice(string.ascii_letters + string.digits + '!@#$%^&*()\-_=+') for _ in range(12))# 检查密码是否符合正则表达式if pattern.search(password):return password# 生成密码
password = generate_password()
print(password)
print("生成的密码:", password)

生成结果:

好了今天的内容分享到这里了,码字不易,感谢大家的三连支持哦! 


http://www.ppmy.cn/news/1443546.html

相关文章

Yolov5简单部署(使用自己的数据集)

一.注意事项 1.本文主要是引用大佬的文章&#xff08;侵权请联系&#xff0c;马上删除&#xff09;&#xff0c;做的工作为简单补充 二.正文 1.大体流程按照 准备&#xff1a;【简单易懂&#xff0c;一看就会】yolov5保姆级环境搭建_哔哩哔哩_bilibili 主要过程&#xff1…

Qt绘图与图形视图之移动鼠标手动绘制任意多边形的简单介绍

往期回顾 【QT进阶】Qt线程与并发之QtConcurrent返回值与run方法的参数说明-CSDN博客 Qt绘图与图形视图之绘图技术知识点的简单介绍-CSDN博客 Qt绘图与图形视图之常见图形、路径、文字、图片的绘制介绍-CSDN博客 Qt绘图与图形视图之移动鼠标手动绘制任意多边形的简单介绍 一、…

如何免费生成文本二维码?文字生成二维码的方法

随着信息技术的不断发展&#xff0c;文本二维码作为一种简便、高效的信息分享方式&#xff0c;受到了越来越多人的关注和应用。文本二维码是将文本信息编码成二维码的形式&#xff0c;通过扫描二维码即可快速获取文本内容&#xff0c;为信息分享和传播提供了全新的可能性。 便…

Internet Download Manager v6.42.7(IDM)一款功能强大的下载工具!

软件介绍 Internet Download Manager &#xff08;IDM&#xff09;是一个将下载速度提高多达5倍&#xff0c;恢复和提高下载进度的工具。能将由于连接丢失、网络问题、计算机关闭或意外断电而中断的下载全面恢复重新启动。凭借着下载计算的速度优势在外媒网站中均受好评&#…

前端项目学习记录1:svg图标的封装与使用

1.下载svg依赖 pnpm i vite-plugin-svg-icons -D 还有一个&#xff0c;下面的不安装可能会报错 pnpm i fast-glob -D 2.vite.config.ts配置 import { defineConfig } from vite import vue from vitejs/plugin-vue import path from "path"; //引入svg需要用到的…

数据分析:扩增子分析(qiime2平台全流程分析)

Amplicon sequencing analysis pipeline through qiime2 platform qiime2是扩增子数据分析的最佳平台之一&#xff0c;其提供了大量从原始data到统计分析的插件&#xff0c;尤其是它的可重复分析且可扩展插件的理念使得其成为扩增子分析首选的平台。 Platform qiime2是扩增子…

SpringMVC基础篇(三)

文章目录 1.SpringMVC映射请求数据1.获取请求头信息1.VoterHandler.java2.request_parameter.jsp3.结果展示 2.自动封装javabean1.需求分析2.应用实例1.Master.java2.Pet.java3.后端接口4.结果展示 3.底层机制 3.调用servlet-api1.基本说明2.代码实例1.接口2.结果展示 3.注意事…

Vue中使用iconfont-阿里巴巴矢量图标库

一、简介 阿里巴巴矢量图标库&#xff08;Iconfont&#xff09;是一个由阿里巴巴提供的矢量图标库&#xff0c;包含了大量的矢量图标&#xff0c;可以供设计师和开发者在线浏览和下载使用。这个库的图标都是由用户上传和分享的&#xff0c;因此种类非常丰富&#xff0c;几乎涵…