「正则表达式」的奇幻漂流之旅

手写字符识别实战:从MNIST到工业级系统的构建与避坑指南 手写字符识别是计算机视觉与模式识别领域的经典任务,其核心原理是让计算机自动将手写字符图像转换为对应的字符编码。传统方法依赖人工设计的特征(如HOG)与分类器(如SVM),而现代深度学习方法,尤其是卷积神经网络(CNN),通过端到端学习自动提取特征,显著提升了模型的泛化能力与识别精度。该技术的核心价值在于将非结构化的手写信息高效、准确地转化为结构化数据,极大地提升了信息处理自动化水平。其应用场景广泛,涵盖银行票据识别、教育表单录入、医疗处方数字化及各类离线文档处理。本文聚焦于构建实用、鲁棒的手写字符识别系统, 阅读详情

什么是正则表达式呢?

想象一下这样的场景:

1

你应该经常使用 「CTRL + F」在文本文件中搜索关键词,定位到自己想要看的地方。不过,有时候你可能并不一定记得你要搜索的具体内容。比如你只知道关键词的开头是「马」,结尾是「梅」,但就是不知道是「马什么梅」,如何快速搜索替换?

2

你在爬取页面的时候,得到的一堆 HTML 标签,但是你只是想拿到其中的关键文本信息,怎么快速剔除掉 HTML 标签,把自己想要的文本从里面提取出来呢?

3

如果你开发了一个网站,允许用户注册,但你要求用户注册的密码需要含有大小写字母和数字,怎么验证呢?又,如何屏蔽用户的违规言论呢?

4

你在使用命令行的时候,如何一步到位的管理相关的文件呢?比如 rm -rf * (咋这个目录下的文件都被删除了?)

...

你看,在这些场景中,我们都需要一个「东西」来「占位」,表达关键的信息,比如在场景 1 中,我们不知道具体叫 「马什么梅」,但是知道它中间一定是个字,那么我们可以制定一个规则,说:「以后这玩意【????】就代表一个任意的中文字」。

???? = 任意一个中文字

如果你的编辑器遵循了这一规则,知道【????】就代表一个任意的中文字,那么我们接下来就可以根据这个规则,使用「马????梅」进行快速匹配了。

所以其实,这个「东西」就是用来描述我们想要的规则的,对吧?

当然,你也知道,我们自己制定的「东西」,编辑器是不会听我们的,如果我们能够知道那些已经被大多数遵循了的「东西」,不就可以做到快速匹配我们想要的内容了吗?

这些被遵循的「东西」,就是正则表达式的元字符。

找到那些被遵循的「东西」

先认识「.」 和 「*」

这两玩意也许是我们最常用到的「东西」了,其中每个「.」用来表达的是「除了换行符以外的任何字符」,像这样:

标高亮的表示被匹配到的字符

一个「.」只能表达一个字符,那如果很多岂不是得点点点点点到天荒地老?所以其实我们不必要这样去用那么多点来匹配,我们可以在「.」后面使用 「*」,这样编辑器就知道:「哦,你要找的是0个或者多个『.』」:

所以,「.」是用来描述相关字符,而「*」用来描述匹配次数的。

和「.」一样

虽然这两玩意已经可以代表大多数内容了,但是对于一些具体的内容,比如数字,换行等,也有已经被遵循的「东西」,和「.」一样,常用到的有:

把这个看熟,你基本可以匹配大部分你需要的内容了,比如你要在这里只找到「handsome」这个词就可以这样:

匹配多个字母,数字,下划线:

只匹配字母:

反向匹配:

匹配回车:

你去玩几下就都熟悉了。

和 「*」 一样

我们知道 「*」代表的是匹配0次或多次。和 「*」 一样也有表示次数的,比如具体多少次,0次或一次:

转义

现在,你已经知道了常用的「东西」,它们都代表着一定的规则,但如果有时候文本出现了和「东西」一样的字符,怎么去匹配呢?

比如说,我们知道「.」是匹配除了换行外的所有字符,但如果文本就出现了「.」,我们只要匹配这个「.」,咋整?

我们可以使用转义字符,也就是在 「.」前面加一个 「\」,就说明我们是真的要找的是「.」:


当你在 「东西」前面加一个「\」,它就失去了功效,变回了原来的模样。

还会常用到这玩意「|」

这个你应该很熟悉,就是「或」的意思,在 「|」的两边,满足其一即可。

a|b 匹配 a 或者 b。

比如判断文件是不是图片类型,就可以这样:

^.*?.(gif|png|jpg)$

小试牛刀

现在,找到了这些「东西」,也知道了转义....现在我们来写一个正则表达式,匹配邮箱的规则吧。

我们知道,邮箱的格式是这样的:

xxxx@xxxx.xxx

我们可以发现,邮箱有两很明显的特征点:「@」和「.」,而在「@」和 「.」前面和后面可以是一个或多个「大小写字母或数字或下划线」。

我们可以从开始到结束的特征点写出来:

^[大小写字母或数字或下划线]+@[大小写字母或数字或下划线]+\.[大小写字母或数字或下划线]+$

替换成我们知道的「东西」:

^[a-zA-Z0-9_]+@[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+$

好用的 ()

在这些「东西」里,()能够进行分组,这对于我们在提取匹配我们关心的内容很有帮助,比如我们要提取这样的内容:

我们可以使用 ()对相关的匹配进行分组,这样得到多个分组(group1、group2、group3...)结果,这样可以很方便的从中提取内容,像这样:

.*? 和 .*

这两玩意都是匹配多个字符的「东西」,不过一个带了「?」一个不带,它们有什么区别呢?

.*? 表示的是非贪婪匹配

.* 表示的是贪婪匹配

啥意思呢?

举一个最简单的例子,比如我们有一个这样的文本:

abcdefghijkabcdefghijkabcdefghijkabcdefghijk

如果我们想从中提取 a 到 k 的内容,你可以发现,当我们「贪婪」的时候得到的结果就是这样的:

abcdefghijkabcdefghijkabcdefghijkabcdefghijk

「非贪婪」的时候,得到的结果就是这样的:

abcdefghijk

那么用在它们两身上,就是这样的,贪婪:

非贪婪:

意思就是这么个意思~

ok,这就是我常常会使用到的正则表达式,在 Python 中,有个 re 库可以专门操作这些玩意的,你可以到下面这个链接看到具体的解释:

https://docs.python.org/zh-cn/3/library/re.html

顺便,再给你推荐几个正则表达式可以参考的地方:

这里,有图文相关的正则表达式给你参考:

https://github.com/cdoco/common-regex

这里,可以让你校验自己写的正则:

https://regexr.com/

这里,有多个语言版本的正则表达式教程(如果你想更进一步了解反向引用,零宽断言的可以看看):

https://github.com/ziishaned/learn-regex/blob/master/README.md

我在上面演示用到的插件,叫「Regex Matcher」。

ok,以上就是小编今天给你带来的分享,正则表达式算是基础且通用的技能了,希望对你有帮助,如果有的话,请拼命点赞分享赞赏一波,哈哈,那么我们下回见,peace!

推荐阅读:
入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |
趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影

年度爆款文案

点这里,直达菜鸟学PythonB站!!
TS中的?.、??、!.符号:新手最容易混淆的3个操作符详解(附Vue3实战案例) 本文详细解析了TypeScript中新手最容易混淆的三个操作符:可选链`?.`、空值合并`??`和非空断言`!.`。通过对比其核心区别、使用场景,并结合Vue 3实战案例,帮助开发者安全、优雅地处理空值问题,避免常见陷阱,提升代码的健壮性和可读性。 阅读详情

相关推荐

基于FPGA的心电信号实时处理与智能诊断系统实现【附源码解析】

本文详细介绍了基于FPGA的心电信号实时处理与智能诊断系统的设计与实现。系统通过高精度采集电路和FPGA数字滤波技术处理微弱心电信号,采用自适应算法准确检测QRS波群,实现心率计算和心律异常诊断。附源码解析展示了FIR滤波器、中值滤波器和诊断逻辑的Verilog实现,为心电监护系统开发提供实用参考。

g8f9d0s1a2的博客 770

?.、!.、??、|| 和 &&区别

告诉 TypeScript 或 JavaScript,某个值一定不是。是常用的操作符,用于处理不同的逻辑场景。:判断左侧值是否为真值,如果是则返回右侧值,否则返回左侧值。:在 TypeScript 中明确告诉编译器某个值不为空。:访问深层嵌套对象时,避免因中间属性不存在而报错。:安全访问嵌套对象的属性或方法,避免因。),如果是则返回右侧值,否则返回左侧值。,如果是则返回右侧值,否则返回左侧值。:提供默认值,且可以接受假值被覆盖。:判断左侧值是否为假值(:提供默认值,且不希望。,避免类型检查报错。

weixin_50756332的博客 2746

Ubuntu技巧-Ubuntu远程访问之SSH反向代理

💡大家好,我是可夫小子,《小白玩转ChatGPT》专栏作者,关注AIGC、互联网和自媒体。要把内网的一台的Ubuntu服务器让外面也能访问,总共有三种可行的方案,前面已经介绍了两种方式,今天就来介绍更健壮稳定的方式——ssh反向代理。大概的框架图如下,今天就从服务器购买到设置,手把手的教程,让你花费100块以内,就拥有一个强大的「云服务器」。

可夫小子的频道 1151

linux 管道符、特殊符号

如果使用

顺其自然~专栏 1737

手把手教你搭建离线语音助手:FunASR+DeepSeek+TTS保姆级教程

本文详细介绍了如何利用FunASR、DeepSeek和TTS技术搭建离线语音助手系统。从环境配置、模型部署到唤醒词检测优化、语音识别与语义理解联调,再到语音合成与系统集成,提供全链路实战教程。特别适合智能家居控制、企业内部知识问答等需要数据隔离的场景,实现高响应、低延迟的离线语音交互体验。

weixin_30316097的博客 475

【Get深一度】小波分析概念1——紧支撑集是什么意思,通俗解释

最近学到小波,在仿真中也用到了紧支撑函数;紧支撑性越好,说明能量越集中;用最通俗的话来讲,紧支撑是这样的: 对于函数f(x),如果自变量x在 0附近的取值范围内,f(x)能取到 C; 而在此之外,f(x)取值为 0; 那么这个函数f(x)就是紧支

Trey_优快云 的优快云博客 8348

正则表达式详解

一、正则表达式概述 正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。通俗的讲就是按照某种规则去匹配符合条件的字符串 一个正则表达式是一种从左到右匹配主体字符串的模式。 “Regular expression”这个词比较拗口,我们常使用缩写的术语“regex”或“regexp”。 正则表达式可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串、...

m0_56312312的博客 5万+

Python 爬虫:获取网页数据的 5 种方法

requests:适用于简单的静态网页抓取,易于使用。requestslxml:适合需要高效解析大规模网页内容的情况,支持 XPath 和 CSS 选择器。Selenium:适用于动态网页(JavaScript 渲染)的抓取,模拟浏览器行为获取动态数据。Scrapy:强大的爬虫框架,适合大规模的网页抓取任务,支持异步请求和高级功能。PyQuery:基于 jQuery 语法,适合快速开发,提供简洁的 CSS 选择器语法。

想看什么文章都可以私信给我,综合性博客。 5513

Python-正则表达式总结+常用示例

"d{7,8}$"正确格式为:“XXX-XXXXXXX”、“XXXX- XXXXXXXX”、“XXX-XXXXXXX”、“XXX-XXXXXXXX”、“XXXXXXX"和"XXXXXXXX”。验证InternetURL:"^http://([“w-]+”.)+["w-]+(/[“w-./?验证Email地址:"^"w+([-+.]"w+)*@"w+([-.]“w+)*”."w+([-.]“w+)*$”。[1-9]|1[0-2])$"正确格式为:“01"~"09"和"1"~"12”。

2301_82244125的博客 416

【图像去噪】基于梯度为0法实现图像去噪附matlab代码

近几年,徐立提出的 L0 梯度最小化模型在图像平滑领域得到了广泛的应用和发展[11]. 和以往的局部滤波模型不同的是该模型可以全局的估计图像的像素值,因此,L0 梯度最小化模型在处理图像的同时能够很好的保护图像的边缘.​。

qq_59747472的博客 184

PyTorch深度学习实战(29)——变分自编码器(Variational Autoencoder, VAE)

变分自编码器 (Variational Autoencoder, VAE) 是一种结合了自编码器和概率建模的生成模型,通过编码器将输入数据映射到潜在空间中的概率分布,并通过解码器将从潜在空间采样得到的潜在变量映射回原始数据空间,实现了数据的生成和特征学习。

盼小辉丶的博客 1万+

正则表达式考点

在编程语言字符串中,正则字面量通常写在字符串内,需注意语言本身的反斜杠转义规则,常需双重转义(如。:正向肯定预查(先行断言),匹配位置后需满足 pattern。:反向肯定预查(后行断言),匹配位置前需满足 pattern。写一个正则,匹配中国大陆手机号(简单版,1开头,11位数字)。写一个正则,匹配 HTML 标签内的内容(不包含标签本身)。:匹配单词字符(字母、数字、下划线)/ 非单词字符。:匹配空白字符(空格、制表符等)/ 非空白字符。:默认量词是贪婪的(尽可能多匹配),在其后加。

2301_77574331的博客 300

RH850系列芯片深度剖析 1.5-链接(ld)文件解析

基础编译过程分为四个阶段:预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)、链接(Linking)。执行这四个阶段的程序(预处理器、编译器、汇编器、和链接器)一起构成了编译系统。CONSTANTS接下来的内存空间定义部分会使用这些常量来定义内存空间的范围,理论上来说不定义常量也没有影响,直接用魔鬼数字代替,定义常量的主要目的就是方便理解以及方便修改;从示例中可以看出,常量的值可以为16进制或者10十进制,而且10进制支持数量级单位(k级,M级);

本博客专注于嵌入式软件领域技术分享。 1427

当代码遇上“叛徒“:转义字符的奇幻漂流之旅

咱们程序员每天敲代码时,总会遇到些神(keng)奇(die)的符号组合——比如在字符串里突然冒出来的反斜杠!下次看到反斜杠时,记得它不是在捣乱,而是在默默守护你的代码世界呢~(比心❤️):当你的字符串开始出现三个以上连续反斜杠时,是时候考虑重构代码了!反斜杠就像个保镖,让双引号能安全地待在字符串里(这就是传说中的"字符突围术")!举个栗子🌰:当你想在Python里打印"她说:“你好!是ASCII的转义字符(ESC),后面跟着颜色控制码。处理正则时,转义符要转两次!作为转义界的祖师爷,C语言的转义字符都是。

2501_91408482的博客 841

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

使用Python编写一个简单的网页爬虫,从网站上抓取标题和正文内容。

亲爱的读者,你是否曾梦想过拥有一把打开数字世界大门的钥匙?今天,就让我们一起握紧这把钥匙——Python,这个编程界的“瑞士军刀”,它不仅能帮你解决生活中的琐碎问题,还能带你遨游于互联网的广阔天地之间。首先,让我们来装备自己吧!看,这三行代码就像是探险者背包里的指南针、火把和绳索,虽不起眼却至关重要。requests是我们的信息采集器,能够轻松获取网页内容;则是解析大师,擅长从复杂的HTML结构中抽丝剥茧;而正则表达式re,则是寻找特定模式的强大工具。准备好了吗?我们的旅程即将开始!

一个平平无奇的博客,一个平平无奇的人,一个平平无奇的约定 903

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Hive【从SQL到MapReduce:核心架构与执行引擎深度解析】

本文深度解析Hive从SQL到MapReduce的核心架构与执行引擎工作原理。通过实际案例展示Hive如何将类SQL查询转化为分布式计算任务,详细讲解查询解析、编译器优化及不同执行引擎(MapReduce、Tez、Spark)的性能差异,并提供TB级数据下的调优实战经验与存储格式选型指南。

weixin_30379531的博客 250

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

正则表达式实战指南:原理、口诀与高频场景案例

本质:正则=用特殊符号组合描述字符串“筛选条件”口诀:点星加问方,组合灵活用;脱字符开头,美金符结尾;斜杠d是数字,斜杠w是字母;竖线是或者,分支随你挑。实战:速查元字符表+高频案例,遇到复杂需求先用自然语言描述,再逐步拆解为正则。如需定制场景,欢迎留言交流。

IT技术学习与工作笔记分享 2334

常用的正则表达式组成

正则表达式是一种强大的文本处理工具,用于匹配、搜索、替换、分割等多种操作。以下是正则表达式的基本组成和语法,以及如何使用它们来构建复杂的模式。

u014755700的博客 1538

运算符 ?. 、?? 、 ! 的介绍和用法

运算符是JavaScript与TypeScript中都可以使用,!TypeScript中常用的操作符,表示表达式一定不是null或者undefined,可直接调用无须额外验证。逻辑运算符,当左侧的表达式为null或undefined时,它会返回其右侧的表达式。允许我们读取位于连接对象链深处的属性的值,而不必显式地验证链中的每个引用是否有效。在运算中合理使用这几种运算符,可以更简洁方便的编写代码,也更容易理解。与||运算符区别:||当左边为false时,就会取右侧的表达式。

FaxMiao的博客 6563

《正则表达式必知必会》学习笔记

《正则表达式必知必会》学习笔记 一、匹配单个字符——”.”(英文句号) 可以匹配任何一个单个的字符(可以是单个的字符,数字甚至是”.”本身)。 在同一个正则表达式里,”.”可以连续出现(..)将匹配任意两个字符,也可以间隔出现在不同位置。 若需要匹配”.”本身,则需要在正则表达式里面用”\”对”.”进行转义。 注意:若需要搜索”\”本身,则需要对”\”进行转义,就是在”\”前面...

Vanswells的博客 1478

正则表达式总结

一、常用元字符 \:转义符,其中: \d:匹配数字字符;\D:匹配非数字字符; \n:换行符;\r:回车符;\t:制表符;\v:垂直制表符;\f:换页符 \s:匹配任意空字符,等价于[\r\n\t\v\f];\S:匹配任意空字符; \b:匹配单词边界;\B:匹配非单词边界 \w:匹配包括下划线的任意字符,类似但不等价于[a-zA-Z0-9_],这里的"单词"使用Unicode字符集;\

lanxiangru的博客 2144

正则表达式

(用于匹配模式,但不包括在匹配列表中)。当我们需要一个模式的前面或后面有另一个特定的模式时,就可以使用它们。常用于执行一个全局搜索匹配,即(不仅仅返回第一个匹配的,而是返回全部)。用于筛选所有匹配结果,筛选条件为 其前不跟随着断言中定义的格式。用于筛选所有匹配结果,筛选条件为 其前跟随着断言中定义的格式。例如 a* 匹配所有a开头的字符 【a-z】*匹配所有小写字母开头的字符。用于筛选所有匹配结果,筛选条件为 其后不跟随着断言中定义的格式。^ 用来检查匹配的字符串是否在所匹配字符串的开头。

liu62615的博客 113

Linux服务器shell特殊字符大全

这些特殊字符和符号是 Linux 系统和 Shell 编程的核心部分,掌握它们能够有效提高你的工作效率,帮助你编写更简洁、更强大的命令和脚本。

m0_65482680的博客 1240

Windows批处理常用符号(2)

Windows批处理常用符号

m0_59900155的博客 2090

正则表达式的基本概念及示例

简单的正则表达式介绍(自用笔记)

Rozen_a的博客 1886
上一篇: 膜拜大神!Linux之父家中停电6天,竟然还码出新版Linux内核还是来了
下一篇: 2020年度开发者工具Top 100名单!
菜鸟学Python
博客等级 码龄9年 8062粉丝 571原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值