139.《python中的正则详解》

文章目录

      • 什么是正则
      • 正则表达式语法
      • 正则demo
          • 1.匹配模式
          • 2.finditer
          • 3.正则分组
          • 4.非捕获组
          • 5.分组的引用
          • 6. 正则替换
          • 7.正则切割
          • 7.正则「或」
          • 7.枚举取反
      • 面试题

前言: 拉开差距的不是上班的8小时,而是下班后的16小时,同志们,加油,卷起!!!

什么是正则

1.正则表达式是一种高级文本处理技术,通过特征匹配、特征搜索和特征替换功能完成对复杂字符串的校验、字符串搜索、和替换操作。
2.正则表达式是一些由字符和特殊符号组成的字符串,这些字符和特殊符号有特殊意义,用来描述一个字符串的组成方式.

正则表达式语法

表达式描述
\d数字
\D非数字
\w字母数字下划线
\s所有空白符,包括换行符
\S非空白符,不包括换行符
.任意字符, 不包括换行符
[]枚举, 匹配括号里出现的字符
[^]枚举取反, 匹配中括号里出现的字符之外的字符
*子表达式零次或多次
+子表达式一次或多次
?子表达式零次或一次,或指明一个非贪婪限定符
\转义符
^匹配字符串的开头
$匹配字符串的结尾
{n,m}匹配前面的子表达式至少n次,至多m次
|
()分组
(?😃非捕获组
exp1(?=exp2)匹配exp2 前面的 exp1
(?<=exp2)exp1匹配 exp2 前面的 exp1
exp1(?!exp2)匹配后面不是 exp2 的 exp1
(?<!exp2)exp1匹配前面不是 exp2 的 exp1

正则demo

1.匹配模式
import re
text = '正则表达式是一种高级文本处理\n技术,通过特征匹配、特征搜索和特征替换功能完成对复杂字符串的\n校验、字符串搜索、和替换操作'
"""
	I: 忽略大小写.
	M: 拆分行, 多行匹配. 这个是影响^$.
	S: 忽略换行符. 也可以理解为使"."匹配所有字符.
	X: 添加注释, 使正则表达式便于理解.
	DOTALL: 等价于S.
	U: python3不用了.
"""
result = re.findall(r'.* # 这是我的test注释', text, re.M | re.X)
print(result) 
# ['正则表达式是一种高级文本处理', '', '技术,通过特征匹配、特征搜索和特征替换功能完成对复杂字符串的', '', '校验、字符串搜索、和替换操作', '']
2.finditer

测试文本

text = '鲁镇的酒店的格局,是和别处不同的:都是当街一个曲尺形的大柜台,柜里面预备着热水,可以随时温酒。做工的人,傍午傍晚散了工,每每花四文铜钱,买一碗酒,——这是二十多年前的事,现在每碗要涨到十文,——靠柜外站着,热热的喝了休息;倘肯多花一文,便可以买一碟盐煮笋,或者茴香豆,做下酒物了,如果出到十几文,那就能买一样荤菜,但这些顾客,多是短衣帮⑴,大抵没有这样阔绰⑵。只有穿长衫的,才踱进店面隔壁的房子里,要酒要菜,慢慢地坐喝。
我从十二岁起,便在镇口的咸亨酒店里当伙计,掌柜说,样子太傻,怕侍候不了长衫主顾,就在外面做点事罢。外面的短衣主顾,虽然容易说话,但唠唠叨叨缠夹不清的也很不少。他们往往要亲眼看着黄酒从坛子里舀出,看过壶子底里有水没有,又亲看将壶子放在热水里,然后放心:在这严重监督下,羼⑶水也很为难。所以过了几天,掌柜又说我干不了这事。幸亏荐头⑷的情面大,辞退不得,便改为专管温酒的一种无聊职务了。
我从此便整天的站在柜台里,专管我的职务。虽然没有什么失职,但总觉得有些单调,有些无聊。掌柜是一副凶脸孔,主顾也没有好声气⑸,教人活泼不得;只有孔乙己到店,才可以笑几声,所以至今还记得。
孔乙己是站着喝酒而穿长衫的唯一的人。他身材很高大;青白脸色,皱纹间时常夹些伤痕;一部乱蓬蓬的花白的胡子。穿的虽然是长衫,可是又脏又破,似乎十多年没有补,也没有洗。他对人说话,总是满口之乎者也⑹,教人半懂不懂的。因为他姓孔,别人便从描红纸上的“上大人孔乙己⑺”这半懂不懂的话里,替他取下一个绰号,叫作孔乙己。孔乙己一到店,所有喝酒的人便都看着他笑,有的叫道,“孔乙己,你脸上又添上新伤疤了!”他不回答,对柜里说,“温两碗酒,要一碟茴香豆。”便排出九文大钱。他们又故意的高声嚷道,“你一定又偷了人家的东西了!”孔乙己睁大眼睛说,“你怎么这样凭空污人清白……”“什么清白?我前天亲眼见你偷了何家的书,吊着打。”孔乙己便涨红了脸,额上的青筋条条绽出,争辩道,“窃书不能算偷……窃书!……读书人的事,能算偷么?”接连便是难懂的话,什么“君子固穷⑻”,什么“者乎”之类,引得众人都哄笑起来:店内外充满了快活的空气。
听人家背地里谈论,孔乙己原来也读过书,但终于没有进学⑼,又不会营生⑽;于是愈过愈穷,弄到将要讨饭了。幸而写得一笔好字,便替人家钞⑾钞书,换一碗饭吃。可惜他又有一样坏脾气,便是好喝懒做。坐不到几天,便连人和书籍纸张笔砚,一齐失踪。如是几次,叫他抄书的人也没有了。孔乙己没有法,便免不了偶然做些偷窃的事。但他在我们店里,品行却比别人都好,就是从不拖欠;虽然间或没有现钱,暂时记在粉板上,但不出一月,定然还清,从粉板上拭去了孔乙己的名字。
孔乙己喝过半碗酒,涨红的脸色渐渐复了原,旁人便又问道,“孔乙己,你当真认识字么?”孔乙己看着问他的人,显出不屑置辩的神气。他们便接着说道,“你怎的连半个秀才也捞不到呢?”孔乙己立刻显出颓唐不安模样,脸上笼上了一层灰色,嘴里说些话;这回可是全是之乎者也之类,一些不懂了。在这时候,众人也都哄笑起来:店内外充满了快活的空气。
在这些时候,我可以附和着笑,掌柜是决不责备的。而且掌柜见了孔乙己,也每每这样问他,引人发笑。孔乙己自己知道不能和他们谈天,便只好向孩子说话。有一回对我说道,“你读过书么?”我略略点一点头。他说,“读过书,……我便考你一考。茴香豆的茴字,怎样写的?”我想,讨饭一样的人,也配考我么?便回过脸去,不再理会。孔乙己等了许久,很恳切的说道,“不能写罢?……我教给你,记着!这些字应该记着。将来做掌柜的时候,写账要用。”我暗想我和掌柜的等级还很远呢,而且我们掌柜也从不将茴香豆上账;又好笑,又不耐烦,懒懒的答他道,“谁要你教,不是草头底下一个来回的回字么?”孔乙己显出极高兴的样子,将两个指头的长指甲敲着柜台,点头说,“对呀对呀!……回字有四样写法⑿,你知道么?”我愈不耐烦了,努着嘴走远。孔乙己刚用指甲蘸了酒,想在柜上写字,见我毫不热心,便又叹一口气,显出极惋惜的样子。
有几回,邻居孩子听得笑声,也赶热闹,围住了孔乙己。他便给他们茴香豆吃,一人一颗。孩子吃完豆,仍然不散,眼睛都望着碟子。孔乙己着了慌,伸开五指将碟子罩住,弯腰下去说道,“不多了,我已经不多了。”直起身又看一看豆,自己摇头说,“不多不多!多乎哉?不多也⒀。”于是这一群孩子都在笑声里走散了。
孔乙己是这样的使人快活,可是没有他,别人也便这么过。
有一天,大约是中秋前的两三天,掌柜正在慢慢的结账,取下粉板,忽然说,“孔乙己长久没有来了。还欠十九个钱呢!”我才也觉得他的确长久没有来了。一个喝酒的人说道,“他怎么会来?……他打折了腿了。”掌柜说,“哦!”“他总仍旧是偷。这一回,是自己发昏,竟偷到丁举人家里去了。他家的东西,偷得的么?”“后来怎么样?”“怎么样?先写服辩⒁,后来是打,打了大半夜,再打折了腿。”“后来呢?”“后来打折了腿了。”“打折了怎样呢?”“怎样?……谁晓得?许是死了。”掌柜也不再问,仍然慢慢的算他的账。
中秋之后,秋风是一天凉比一天,看看将近初冬;我整天的靠着火,也须穿上棉袄了。一天的下半天,没有一个顾客,我正合了眼坐着。忽然间听得一个声音,“温一碗酒。”这声音虽然极低,却很耳熟。看时又全没有人。站起来向外一望,那孔乙己便在柜台下对了门槛坐着。他脸上黑而且瘦,已经不成样子;穿一件破夹袄,盘着两腿,下面垫一个蒲包,用草绳在肩上挂住;见了我,又说道,“温一碗酒。”掌柜也伸出头去,一面说,“孔乙己么?你还欠十九个钱呢!”孔乙己很颓唐的仰面答道,“这……下回还清罢。这一回是现钱,酒要好。”掌柜仍然同平常一样,笑着对他说,“孔乙己,你又偷了东西了!”但他这回却不十分分辩,单说了一句“不要取笑!”“取笑?要是不偷,怎么会打断腿?”孔乙己低声说道,“跌断,跌,跌……”他的眼色,很像恳求掌柜,不要再提。此时已经聚集了几个人,便和掌柜都笑了。我温了酒,端出去,放在门槛上。他从破衣袋里摸出四文大钱,放在我手里,见他满手是泥,原来他便用这手走来的。不一会,他喝完酒,便又在旁人的说笑声中,坐着用这手慢慢走去了。
自此以后,又长久没有看见孔乙己。到了年关⒂,掌柜取下粉板说,“孔乙己还欠十九个钱呢!”到第二年的端午,又说“孔乙己还欠十九个钱呢!”到中秋可是没有说,再到年关也没有看见他。
我到现在终于没有见——大约孔乙己的确死了。 [2]
一九一九年三月。'
# 需求: 找出 所有的 ‘孔乙己’
result = re.finditer(r'孔乙己', text, re.M)
for item in result:
	print(item.group())

在这里插入图片描述

3.正则分组
 需求:
text_list = ['2022-06-12', '2021 07 08', '2019/05/06']
# 匹配年月日, **单独**把年,月,日拿出来.
for text in text_list:
   result2 = re.findall(r'(\d{4})[-\s/]+(\d{2})[-\s/]+(\d{2})', text)
   print(result2[0])
   print(result2[1])
   print(result2[2])
 

在这里插入图片描述

4.非捕获组
# 需求:之遥域名,不要协议
text1_list = [
    'https://www.baidu.com/',
    'http://www.baidu.com/'
]
for text1 in text1_list:
    result = re.findall(r'(?:http://|https://)(www.*)$', text1)
    print(result[0][:-1])

在这里插入图片描述

5.分组的引用
text2_list = [
    '<div>王老板</div>',
    '<div>王老板</img>'
]
for text2 in text2_list:
	result = re.search(r'<(\w+)>[\u4e00-\u9fa5]+</\1>', text2)
	print(result)

在这里插入图片描述

6. 正则替换
# 需求: 我不管这个人是谁 ,我都要他是永远的神.
text3_list = [
    '王老板永远的神',
    '张老板永远的无敌',
    '李老板永远的爹',
    '邱老板永远的神父1212121'
]
for text3 in text3_list:
	result = re.sub(r'(.老板永远的)(.*)', r'\1神',text3)
	print(result)

在这里插入图片描述

7.正则切割
str = '猿人学, 王老板; 卞大. 周杰伦'
result = re.split(r'[,;.]', str)
print(result)

在这里插入图片描述

7.正则「或」
text_list09 = [
    'wlb.avi',
    'wlb.mp4',
    'wlb.jpg',
    'wlb.zip',
    'wlb.txt',
    'wlb.xls',
    # 'wlb.mpt',
]
for item in text_list09:
	result = re.findall(r'wlb.(avi|mp4|jpg|zip|txt|xlsx?)$', item)
	print(result)

在这里插入图片描述

7.枚举取反
# 需求: 取出所有英文
str = '正则表达式是一种高级文本处理技术(Regular expression is an advanced text processing technology)'
result = re.search(r'[^\u4e00-\u9fa5]+', str)

在这里插入图片描述

面试题

import re
# 题1: 匹配出叠字的亲戚, 如爷爷, 奶奶可通过, 姑妈不可通过.
text4_list = [
    'yeye',
    'nainai',
    'jiujiu',
    'guma',
    'yima',
    'baba',
]
regex = re.compile(r'([^\W\d_]+)\1')
for text4 in text4_list:
    regex = regex.search(r'请写入正则表达式', text4)
    if regex:
        print("匹配成功:", regex.group())
    else:
        print("匹配失败:", text4)

# 见图片. 面试题.jpg
test_string = "<a>测试</a><sub>测试测试</sub><sup>测试测试测试</sup><div>测试测</div><img>testtesttest</img>"


写一个方法清除字符串中除了. .</sub>以外所有 html标签

test_string = "<a>测试</a><sub>测试测试</sub><sup>测试测试测试</sup><div>测试测</div><img>testtesttest</img>"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/944898.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从安全角度看 SEH 和 VEH

从安全角度看 SEH 和 VEH 异常处理程序是处理程序中不可预见的错误的基本方法之一 https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/exceptions/ SEH——结构化异常处理程序 就其工作方式而言&#xff0c;异常处理程序与其他处理程序相比相当基础&#xff0…

ESP-IDF学习记录(3)ESP-IDF组件管理

既然官方把这个组件管理按钮放置的这么明显&#xff0c;就一定有他的用心良苦&#xff0c;今天学习一下这个组件管理。 Componments manager 1.给当前项目安装组件 IDF Component Manager and ESP Component Registry Documentation — IDF Component Management documenta…

华为麦芒5(安卓6)termux记录 使用ddns-go,alist

下载0.119bate1 安卓5和6版本,不能换源,其他源似乎都用不了,如果root可以直接用面具模块 https://github.com/termux/termux-app/releases/download/v0.119.0-beta.1/termux-app_v0.119.0-beta.1apt-android-5-github-debug_arm64-v8a.apk 安装ssh(非必要) pkg install open…

园区网综合拓扑实验

一、实验要求 实验拓扑图如上图所示 1、按照图示的VLAN及IP地址需求&#xff0c;完成相关配置 2、要求SW1为VLAN 2/3的主根及主网关 SW2为vlan 20/30的主根及主网关 SW1和SW2互为备份 3、可以使用super vlan&#xff08;本实验未使用&#xff09; 4、上层…

JSON 系列之4:JSON_VALUE

JSON_VALUE的作用&#xff0c;简单来说&#xff0c;就是从JSON到SQL&#xff1a; SQL/JSON function JSON_VALUE selects JSON data and returns a SQL scalar or an instance of a user-defined SQL object type or SQL collection type (varray, nested table) 所以&#xff…

设置首选网络类型以及调用Android框架层的隐藏API

在Android SDK中提供的framework.jar是阉割版本的&#xff0c;比如有些类标记为hide&#xff0c;这些类不会被打包到这个jar中&#xff0c;而有些只是类中的某个方法或或属性被标记为hide&#xff0c;则这些类或属性会被打包到framework.jar&#xff0c;但是我们无法调用&#…

Mac 12.1安装tiger-vnc问题-routines:CRYPTO_internal:bad key length

背景&#xff1a;因为某些原因需要从本地mac连接远程linxu桌面查看一些内容&#xff0c;必须使用桌面查看&#xff0c;所以ssh无法满足&#xff0c;所以决定安装vnc客户端。 问题&#xff1a; 在mac上通过 brew install tiger-vnc命令安装, 但是报错如下&#xff1a; > D…

【Java-tesseract】OCR图片文本识别

文章目录 一、需求二、概述三、部署安装四、技术细节五、总结 一、需求 场景需求:是对识别常见的PNG,JPEG,TIFF,GIF图片识别&#xff0c;环境为离线内网。组件要求开源免费&#xff0c;并且可以集成Java生成接口服务。 二、概述 我不做选型对比了,我筛选测试了下Tesseract(v…

PCIe和DMA:数据传输的“双子星“

简单来说&#xff0c;PCIe是一种硬件总线标准&#xff0c;就像高速公路&#xff1b;DMA是一种数据传输机制&#xff0c;就像在高速公路上行驶的卡车。所以这两个是两种不同的概念。 理解PCIe传输 PCIe&#xff08;PCI Express&#xff09;是一种硬件接口规范&#xff0c;定义…

VS Code中怎样查看某分支的提交历史记录

VsCode中无法直接查看某分支的提交记录&#xff0c;需借助插件才行&#xff0c;常见的插件如果git history只能查看某页面的改动记录&#xff0c;无法查看某分支的整体提交记录&#xff0c;我们可以安装GIT Graph插件来解决这个问题 1.在 VSCode的插件库中搜索 GIT Graph安装&a…

第三方接口设计注意要点

实际工作中&#xff0c;我们会遇到与三方系统对接的情形&#xff0c;比如对接短信服务、支付服务、地图服务、以及一些外部业务系统的调用和回调等等&#xff0c;不论是我们调用第三方接口还是我们为其他系统提供接口服务&#xff0c;调用过程中会遇到一些大大小小的问题和吐槽…

使用 pushy 热更新后 sentry 不能正常显示源码

问题 使用 Android Studio 打包后&#xff0c;上传使用 sentry 官网命令打包的 sourcemap 文件&#xff0c;sentry能正常显示异常位置源码。 使用 pushy 热更新之后&#xff0c;sentry 不能正常显示异常位置的源代码。 如下图&#xff1a; 问题原因&#xff1a; 使用 pushy …

Nginx的性能分析与调优简介

Nginx的性能分析与调优简介 一、Nginx的用途二、Nginx负载均衡策略介绍与调优三、其他调优方式简介四、Nginx的性能监控 一、Nginx的用途 ‌Nginx是一种高性能的HTTP和反向代理服务器&#xff0c;最初作为HTTP服务器开发&#xff0c;主要用于服务静态内容如HTML文件、图像、视…

第26周:文献阅读

目录 摘要 Abstract 文献阅读 现有问题 提出方法 创新点 CEEMDAN-BiGRU-SVR-MWOA框架 多源数据融合 参数优化 方法论 实验研究 数据准备 评估指标 结论 适应性分析 总结 摘要 本周阅读的文献是《A Hybrid Data-Driven Deep Learning Prediction Framework fo…

微信V3支付报错 平台证书及平台证书序列号

1.平台证书及平台证书序列号设置错误报错&#xff1a; 错误1&#xff1a; Verify the response’s data with: timestamp1735184656, noncea5806b8cabc923299f8db1a174f3a4d0, signatureFZ5FgD/jtt4J99GKssKWKA/0buBSOAbWcu6H52l2UqqaJKvrsNxvodB569ZFz5G3fbassOQcSh5BFq6hvE…

LunarVim安装

LunarVim以其丰富的功能和灵活的定制性&#xff0c;迅速在Nvim用户中流行开来。它不仅提供了一套完善的默认配置&#xff0c;还允许用户根据自己的需求进行深度定制。无论是自动补全、内置终端、文件浏览器&#xff0c;还是模糊查找、LSP支持、代码检测、格式化和调试&#xff…

2024.12.25在腾讯云服务器上使用docker部署flask

2024.12.25在腾讯云服务器上使用docker部署flask 操作系统&#xff1a;Ubuntu 根据腾讯云的说明文档安装 Docker 并配置镜像加速源&#xff0c;注意需要安装腾讯云的加速源&#xff0c;使用官网的加速源连接极其不稳定&#xff0c;容易导致运行失败。使用哪个公司的云服务器就…

程序员使用Cursor做独立开发教程

简介 欢迎来到Cursor的独立开发教程&#xff01;在这里&#xff0c;我们将一步步指导您如何成为一名成功的独立开发者&#xff0c;从寻找需求、开发网站、获取流量到网站变现&#xff0c;我们将覆盖独立开发的完整生命周期。 第1章&#xff1a;理解独立开发 1.1 独立开发的…

Java 中的各种锁

​ Java 中我们经常听到各种锁&#xff0c;例如悲观锁&#xff0c;乐观锁&#xff0c;自旋锁等等。今天我们将 Java 中的所有锁放到一起比较一下&#xff0c;并分析各自锁的特点&#xff0c;让大家能够快捷的理解相关知识。 1、悲观锁 VS 乐观锁 从概念上来说 悲观锁: ​ 在…

iOS Masonry对包体积的影响

01 Masonry介绍 Masonry是iOS在控件布局中经常使用的一个轻量级框架&#xff0c;Masonry让NSLayoutConstraint使用起来更为简洁。Masonry简化了NSLayoutConstraint的使用方式&#xff0c;让我们可以以链式的方式为我们的控件指定约束。 常用接口声明与实现&#xff1a; 使用方式…