〖Python语法进阶篇⑩〗- 正则表达式的字符匹配「建议收藏」

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

大家好,又见面了,我是你们的朋友全栈君。

万叶集
? 隐约雷鸣,阴霾天空。 ?
? 但盼风雨来,能留你在此。 ?

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


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

〖Python语法进阶篇⑩〗- 正则表达式的字符匹配「建议收藏」


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


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

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

? 正则表达式的使用

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

import re

test_data = "My name is Neo, I'm 30 years old."		# 将一串字符串赋值给变量 test_data
result_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)		# 匹配除了 \n 之外的所有字符(包含空格)

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

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

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

import re


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

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

运行结果如下图:


在这里插入图片描述


? 正则小案例 – 2

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

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

import re


def startswith(sub, data):
    _sub = '\A{}'.format(sub)
    result = re.findall(_sub, data)

    for i in result:
        return True
    return False

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

执行结果如下:


在这里插入图片描述


? 正则小案例 – 3

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

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

import re


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

运行结果如下:


〖Python语法进阶篇⑩〗- 正则表达式的字符匹配「建议收藏」


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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159364.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 安卓原生镜像(中国网站)「建议收藏」

    安卓原生镜像(中国网站)「建议收藏」安卓原生镜像(谷歌中国站)找了半天百度,好不容易看到,赶紧收藏起来:原生安卓包:https://developers.google.cn/android/images?h1=zh=cn#angler

  • eigen库的使用_eigenvalue

    eigen库的使用_eigenvalueEigen库使用指南1.模块和头文件Core#include<Eigen/Core>,包含Matrix和Array类,基础的线性代数运算和数组操作。 Geometry#include<Eigen/Geometry>,包含旋转,平移,缩放,2维和3维的各种变换。 LU#include<Eigen/LU>,包含求逆,行列式,LU分解。 Cholesky#include<Eigen/Cholesky>,包含LLT和LDLTCholesky分解

    2022年10月18日
  • 视频直播技术详解之采集[通俗易懂]

    视频直播技术详解之采集[通俗易懂]声明:本文为CSDN原创投稿文章,未经许可,禁止任何形式的转载。作者:七牛云责编:钱曙光,关注架构和算法领域,寻求报道或者投稿请发邮件qianshg@csdn.net,另有「CSDN高级架构师群」,内有诸多知名互联网公司的大牛架构师,欢迎架构师加微信qshuguang2008申请入群,备注姓名+公司+职位。随着互联网用户消费内容和交互方式的升级,支撑这些内容和交互方式的基…

  • 亲测解决 :Navigation cancelled from “xxx“ to “xxx“ with a new navigation

    亲测解决 :Navigation cancelled from “xxx“ to “xxx“ with a new navigation使用vue3.0写了一个登入页面,再点击登入的时候,第一次点击会没有反应,F12查看接口都调用了但是没有跳转,控制台打印出错:错误说有异常没有捕获;这个错误是vue-router内部的错误,没有进行catch处理导致的;再vue-router3.0以上的版本新增功能:push和replace方法会返回一个promise;解决方案:在vue的router的js中添加下面代码constoriginalPush=VueRouter.prototype.pushconstorigin

  • Django(4)操作指令大全[通俗易懂]

    Django(4)操作指令大全[通俗易懂]前言我们掌握了如何在命令提示符或PyCharm下创建Django项目和项目应用,无论是创建项目还是创建项目应用,都需要输入相关的指令才能得以实现,这些都是Django内置的操作指令。在PyChar

  • 面渣逆袭:三万字,七十图,详解计算机网络六十二问(收藏版)

    面渣逆袭:三万字,七十图,详解计算机网络六十二问(收藏版)新年第一篇,开工大吉,虎年“豹”富!面渣逆袭系列继续,三万字+七十图详解六十二道网络面试题!强烈建议收藏!

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号