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

这篇具有很好参考价值的文章主要介绍了Python网络爬虫-re正则匹配数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

什么市正则表达式?

常见正则表达式元字符表

匹配字符

元字符

特定构造

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
import re

result = re.match(r'Hello', 'Hello, World!')
print(result.group())  # 输出: Hello

2. re.search(pattern, string)

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

3. re.findall(pattern, string)

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

4. re.finditer(pattern, string)

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

5. re.split(pattern, string)

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

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

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

7. re.compile(pattern)

  • 功能:编译正则表达式,生成一个正则表达式对象。
  • 返回值:返回一个正则表达式对象,可以用于后续的匹配操作。
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() 函数将生成满足条件的密码,并返回该密码。

实现代码如下:

import re
import random
import string


def 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)

生成结果:

Python网络爬虫-re正则匹配数据,Python网路爬虫-从入门到精通实战,kylin,爬虫,算法,python

好了今天的内容分享到这里了,码字不易,感谢大家的三连支持哦! 文章来源地址https://www.toymoban.com/news/detail-857912.html

到了这里,关于Python网络爬虫-re正则匹配数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 006集 正则表达式 re 应用实例—python基础入门实例

    正则表达式指预先定义好一个 “ 字符串模板 ” ,通过这个 “ 字符串模 板” 可以匹配、查找和替换那些匹配 “ 字符串模板 ” 的字符串。 Python的中 re 模块,主要是用来处理正则表达式,还可以利用 re 模块通过正则表达式来进行网页数据的爬取和存储。 正则表达式的英文

    2024年02月01日
    浏览(59)
  • Django_re_path_使用正则匹配url

    与path定义的路由相比,re_path 定义的路由可以使用正则表达式匹配url。 需要注意的是: 如果未定义匹配结果的变量名,匹配的结果默认传入视图的第2个形参。 如果定义了匹配结果的变量名,匹配的结果会传给视图的同名字段,如果没有同名字段会报错。 定义个简单视图如

    2024年02月16日
    浏览(37)
  • re正则入门

    正则表达式 (Regular Expression) 又称 RegEx, 是用来匹配字符的一种工具. 在一大串字符中寻找你需要的内容. 它常被用在很多方面, 比如网页爬虫, 文稿整理, 数据筛选等等 简单的匹配 正则表达式无非就是在做这么一回事. 在文字中找到特定的内容, 比如下面的内容. 我们在 dog runs

    2024年02月11日
    浏览(40)
  • python爬虫入门(三)正则表达式

    开源中国提供的正则表达式测试工具 http://tool.oschina.net/regex/,输入待匹配的文本,然后选择常用的正则表达式,就可以得出相应的匹配结果了 常用的匹配规则如下 模 式 描 述 w 匹配字母、数字及下划线 W 匹配不是字母、数字及下划线的字符 s 匹配任意空白字符,等价于

    2024年02月08日
    浏览(59)
  • Python网页爬虫爬取起点小说——re解析网页数据

    !!注意:我们获取到的网页响应数据,可能会与网页源代码中呈现的格式不同。因为有些网页文件是用JavaScript加载的,浏览器会自动将其解析成html文档格式,而我们获取到的内容是JavaScript格式的文档。所以获取到响应数据之后先要查看内容是否与网页源码中的一致,不一

    2024年02月04日
    浏览(65)
  • 【python】网络爬虫与信息提取--正则表达式

            正则表达式是用来简洁表达一组字符串的表达式。是通用的字符串表达框架,简洁表达一组字符串的表达式,针对字符串表达“简洁”和“特征”思想的工具,判断某字符串的特征归属。         用处:表达文本类型的特征;同时查找或替换一组字符串;匹配字符串

    2024年02月19日
    浏览(75)
  • python re多行匹配

    如果你要多行匹配,那么需要加上 re.S 和 re.M 标志. 加上 re.S 后,  . 将会匹配换行符,默认 . 不会匹配换行符. 代码如下:  加上 re.M 后, ^$ 标志将会匹配每一行,默认 ^ 和 $ 只会匹配第一行. 代码如下:

    2023年04月08日
    浏览(36)
  • 〖Python网络爬虫实战⑨〗- 正则表达式基本原理

    订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+                  python项目实战                 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费专栏,

    2023年04月15日
    浏览(89)
  • python re 模块 正则表达式

    ^ 表示匹配字符串的开始位置 (例外 用在中括号中[ ] 时,可以理解为取反,表示不匹配括号中字符串) $ 表示匹配字符串的结束位置 * 表示匹配 零次到多次(记忆方法: 符号是星星,天上的星星可以是无数个也可以看不到 ) + 表示匹配 一次到多次 (记忆方法: 符号是加号,增加

    2024年02月13日
    浏览(47)
  • Python高级教程(1)——正则表达式(re.match、re.search、re.sub、compile、findall、finditer、split)、正则表达式对象、正则表达式实例

    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 (1)re.match函数 re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none。 函数语法: 通过re.match匹配成功,可以使⽤group⽅法来提取数据

    2024年02月04日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包