软件系统开发定制〖Python语法进阶篇⑩〗- 正则表达式的字符匹配

万叶集
🎉 隐约雷鸣,阴霾天空。 🎉
🎉 软件系统开发定制但盼风雨来,软件系统开发定制能留你在此。 🎉

前言
✌ 作者简介: ✌,软件系统开发定制大家可以叫我 🐶哈士奇🐶 ,软件系统开发定制一位致力于 TFS 软件系统开发定制赋能的博主 ✌
🏆 CSDN软件系统开发定制博客专家认证、软件系统开发定制新星计划第三季全栈赛道 top_1 、软件系统开发定制华为云享专家、软件系统开发定制阿里云专家博主 🏆
📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬
🔥 如果感觉博主的文章还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主哦


专栏系列(点击解锁)学习路线指引知识定位
以浅显易懂的方式轻松入门,让你彻底爱上Python的魅力。
主要围绕多线程编程、正则表达式学习、含贴近实战的项目练习 。
实现日常办公软件的自动化操作,节省时间、提高办公效率。
从实战的角度出发,先人一步,快速转型测试开发工程师。
更新中
更新中
更新中
更新中
更新中
更新中
记录学习及演练过程中遇到的坑,便于后来居上者
三天打鱼,不深入了解原理,只会让你成为脚本小子。
让漏洞复现变得简单,让安全研究者更加专注于漏洞原理本身。
不涉及linux基础,最终案例会偏向于安全加固方向。 [待完结]
2021年9月3日停止更新,转战先知社区等安全社区及小密圈
2021年9月3日停止更新,转战先知社区等安全社区及小密圈
软件测试数据包抓包分析神器
一文学会 fiddle ,学不会倒立吃翔,稀得!
不仅是性能测试神器,更可用于搭建轻量级接口自动化测试框架。
Python实现的自动化测试利器,该篇章仅介绍UI自动化部分。
文档写于2016年,Java实现的UI自动化,仍有借鉴意义。
该工具目前的应用场景已不多,文档已删,为了排版好看才留着。


文章目录


在上一章节我们对正则表达式有了一个比较宏观的认识,并且知道了正则表达式的主要功能是通过匹配规则来获取或者验证字符串中的数据。要想成功的进行字符串的匹配需要使用到正则表达式模块,规则以及需要被匹配的字符串。在这三个条件中,模块与字符串都是准备好的,只有匹配规则异常的灵活,而今天这个章节就是认识一下正则表达式中的特殊字符,通过这些字符就可以针对我们想要的数据进行匹配。


🐳 正则表达式中的特殊字符

特殊字符描述
\d匹配任何十进制的数字,与[0-9]一致
\D匹配任意非数字
\w匹配任何字母数字下划线及unicode字符集
\W匹配非字母数字的数据以及下划线
\s匹配任何空格字符,与 [ \t \r \v \f] 相同
\S匹配任意非空字符
\A匹配字符串的起始
\Z匹配字符串的结束
.匹配任何字符(除了 之外);也叫做通配符

🐬 正则表达式的使用

接下来看一个小案例,帮助我们了解这些 特殊字符的使用方法

import retest_data = "My name is Neo, I'm 30 years old."		# 将一串字符串赋值给变量 test_dataresult_int = re.findall('\d', test_data)	# 使用 findall 函数并传入 '\d' 的匹配规则匹配 test_data(只匹配数字)result_Space = re.findall('\s', test_data)	# 使用 findall 函数并传入 '\d' 的匹配规则匹配 test_data(只匹配空格)result_str = re.findall('\w', test_data)	# 使用 findall 函数并传入 '\d' 的匹配规则匹配 test_data(匹配字符串)result_str_start = re.findall('\AMy', test_data)			# 匹配开头为 My 的字符串result_str_start_null = re.findall('\AMya', test_data)		# 匹配开头为 Mya 的字符串(不存在 mya ,返回空列表)result_str_end = re.findall('old.\Z', test_data)			# 匹配结尾为 old. 的字符串result_str_end_null = re.findall('zold.\Z', test_data)		# 匹配结尾为 zold. 的字符串(不存在 zold ,返回空列表)result_all = re.findall('.', test_data)		# 匹配除了  之外的所有字符(包含空格)print(result_int)print(result_Space)print(result_str)		# 从结果上来看 \w 要比 \d 更高级一些,不仅匹配了 str,也匹配了 int(实际上这里的int依然是字符串)print(result_str_start)print(result_str_start_null)print(result_str_end)print(result_str_end_null)# >>> 执行结果如下# >>> ['3', '0']# >>> [' ', ' ', ' ', ' ', ' ', ' ', ' ']# >>> ['M', 'y', 'n', 'a', 'm', 'e', 'i', 's', 'N', 'e', 'o', 'I', 'm', '3', '0', 'y', 'e', 'a', 'r', 's', 'o', 'l', 'd']# >>> ['My']# >>> []# >>> ['old.']# >>> []# >>> ['M', 'y', ' ', 'n', 'a', 'm', 'e', ' ', 'i', 's', ' ', 'N', 'e', 'o', ',', ' ', 'I', "'", 'm', ' ', '3', '0', ' ', 'y', 'e', 'a', 'r', 's', ' ', 'o', 'l', 'd', '.']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

🐬 正则小案例 - 1

1、定义一个函数,判断传入参数是否包含有数字。

2、定义一个函数,判断传入参数是否含有数字,如果有则移除。

import redef have_number(data):      # 定义一个判断是否存在数字的函数    result = re.findall('\d', data)     # 利用 re 模块的 findall 函数的 \d 规则判断传入的 data 是否存在数字    print(result)    for i in result:        # 利用 for 循环 判断 result 的结果,如果存在返回 True ;反之返回 False        return True    return Falsedef remove_number(data):    result = re.findall('\D', data)    print(result)    return ' '.join(result)if __name__ == '__main__':    test_data_1 = "My name is Neo, I'm 30 year's old."    test_data_2 = "it's a beautiful day to be with you"    result = have_number(test_data_1)    print(result)    result = remove_number(test_data_1)    print(result)    result = re.findall('\W', test_data_2)      # 匹配非字母数字的数据以及下划线    print(result)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

运行结果如下图:



🐬 正则小案例 - 2

1、定义一个 startwith 函数 判断传入数据是否是字符串的开头

2、定义一个 endwith 函数 判断传入数据是否是字符串的结尾

import redef startswith(sub, data):    _sub = '\A{}'.format(sub)    result = re.findall(_sub, data)    for i in result:        return True    return Falsedef endswith(sub, data):    _sub = '{}\Z'.format(sub)    result = re.findall(_sub, data)    if len(result) == 0:        return False    else:        return True        if __name__ == '__main__':    result = startswith('My', test_data_1)    print(result)    result = endswith('old.', test_data_2)    print(result)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

执行结果如下:



🐬 正则小案例 - 3

1、python len() 是可以获取到字符串的长度的,但是当字符串中存在着空格符号的时候也会计算在长度内。

2、利用正则的知识,定义一个计算字符串真实长度的函数

import redef real_len(data):    result = re.findall('\S', data)    return len(result)if __name__ == '__main__':    test_data_1 = "My name is Neo, I'm 30 year's old."    test_data_2 = "it's a beautiful day to be with you"    print(len(test_data_2))    result = real_len(test_data_2)    print(result)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

运行结果如下:



思考:大家可以看出上述的示例中,原本是单词的一部分没经过正则匹配输出之后,变成了一个个单独的字符串,有没有什么办法让它仍按照原本的单词进行输出呢?这就是我们下一章节的内容了,这里就先卖个关子吧。😝😝😝

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发