丽水专业网站建设公司/近期网络营销的热点事件
正则表达式是一种文本模式,用于匹配字符串,它是由字符和特殊字符组成的模式。正则表达式可以用于验证、搜索、替换和提取字符串。其能够应用于各种编程语言和文本处理工具中,如Python、Java、JavaScript等。
正则表达式在线测试工具:https://c.runoob.com/front-end/854/
普通字符
普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。通常情况下普通字符是直接匹配与其相同的字符。如下图:
此处就是从待匹配文本中查找abc
这个字符串,注意必须是与abc
完全匹配才会出现结果。
非打印字符
非打印字符是指在文本中无法直接显示的特殊字符,也称为控制字符或不可见字符。这些字符通常不会在屏幕上显示出来,但它们在计算机系统中起到了各种重要的作用。
字符 | 描述 |
---|---|
\cx | 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符。 |
\f | 匹配一个换页符。等价于 \x0c 和 \cL。 |
\n | 匹配一个换行符。等价于 \x0a 和 \cJ。 |
\r | 匹配一个回车符。等价于 \x0d 和 \cM。 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。 |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
\t | 匹配一个制表符。等价于 \x09 和 \cI。 |
\v | 匹配一个垂直制表符。等价于 \x0b 和 \cK。 |
如下图匹配换行符\n
特殊字符(元字符)
特殊字符就是有一些特殊含义的字符,例如*、\、+等
在这些特殊字符中,如果待匹配文本中出现了与其相同的字符需要匹配的话就需要使这些特殊字符转义,否则它们只会表达自己特殊的含义。正则中的特殊字符有如下表所示。
描述 | 特殊字符 |
---|---|
^ | 匹配输入字符串的开始位置。 |
$ | 匹配输入字符串的结束位置。 |
. | 匹配除换行符外的任意单个字符。 |
* | 匹配前面的元素零次或多次。 |
+ | 匹配前面的元素一次或多次。 |
? | 匹配前面的元素零次或一次。 |
| | 用于分隔多个模式,匹配其中之一。 |
[] | 定义字符类,匹配其中包含的任意一个字符。 |
[^] | 定义反向字符类,匹配不在其中的任意一个字符。 |
() | 用于分组和捕获匹配的内容。 |
\ | 用于转义特殊字符,使其成为普通字符。 |
{n} | 匹配前面的元素恰好 n 次。 |
{n,} | 匹配前面的元素至少 n 次。 |
{n,m} | 匹配前面的元素至少 n 次,但不超过 m 次。 |
以下是一些示例,展示了正则表达式中特殊字符的用法和功能(过多规则就不再贴图展示了,大家自行在测试工具测试):
使用^和$匹配完整的字符串(表示能够匹配到的字符串必须以abc开头结尾):- 正则表达式:^abc$
- 匹配的字符串:abc
- 不匹配的字符串:abcd、aabc使用.匹配除换行符外的任意单个字符:- 正则表达式:a.b
- 匹配的字符串:abb、a_b、axb
- 不匹配的字符串:ab、acdb使用*匹配前面的元素零次或多次:- 正则表达式:a*b
- 匹配的字符串:b、ab、aab、aaab
- 不匹配的字符串:acdb使用+匹配前面的元素一次或多次:- 正则表达式:a+b
- 匹配的字符串:ab、aab、aaab
- 不匹配的字符串:b、acdb使用?匹配前面的元素零次或一次:- 正则表达式:a?b
- 匹配的字符串:b、ab
- 不匹配的字符串:aab、aaab使用|分隔多个模式,匹配其中之一:- 正则表达式:cat|dog
- 匹配的字符串:cat、dog
- 不匹配的字符串:bat、dot使用[]定义字符类,在其中匹配任意一个字符:- 正则表达式:[aeiou]
- 匹配的字符串:a、e、i、o、u
- 不匹配的字符串:b、c、d、f使用[^]定义反向字符类,在其中匹配不在其中的任意一个字符:- 正则表达式:[^aeiou]
- 匹配的字符串:b、c、d、f
- 不匹配的字符串:a、e、i、o、u使用()进行分组和捕获匹配的内容:- 正则表达式:(abc)+
- 匹配的字符串:abc、abcabc、abcabcabc
- 不匹配的字符串:ab、abcc使用\进行特殊字符的转义:- 正则表达式:a\.b
- 匹配的字符串:a.b
- 不匹配的字符串:ab、acb使用{n}、{n,}和{n,m}指定匹配次数的范围:- 正则表达式:a{3}
- 匹配的字符串:aaa
- 不匹配的字符串:aa、aaaa
这些示例展示了正则表达式中特殊字符的一些常见用法和功能,但实际上正则表达式在不同的情境下还有更多的用法和功能。具体的正则表达式语法和用法会因不同的编程语言和正则表达式引擎而有所差异,所以在实际应用中,需要对具体的环境和工具进行了解和调整。
定位符
正则表达式的定位符(Anchors)用于匹配字符串的位置,而不是匹配具体的字符。常见的定位符有以下几种:
^:表示匹配字符串的开始位置。例如,正则表达式"^abc"可以匹配以"abc"开头的字符串。$:表示匹配字符串的结束位置。例如,正则表达式"abc$"可以匹配以"abc"结尾的字符串。\b:表示匹配一个单词边界,即单词的开始或结束位置。一个单词由字母、数字、下划线组成。例如,正则表达式"\bcat\b"可以匹配单独的单词"cat"。\B:表示匹配一个非单词边界,即不是单词的开始或结束位置。例如,正则表达式"\Bcat\B"可以匹配"cat"不在单词边界处的情况。
注意:不能将限定符与定位符一起使用。由于在紧靠换行或者单词边界的前面或后面不能有一个以上位置,因此不允许诸如 ^* 之类的表达式。
若要匹配一行文本开始处的文本,请在正则表达式的开始使用 ^ 字符。不要将 ^ 的这种用法与中括号表达式内的用法混淆。
若要匹配一行文本的结束处的文本,请在正则表达式的结束处使用 $ 字符。
修饰符
修饰符(Modifiers)用于修饰正则表达式的匹配规则,改变匹配的行为。不同的编程语言和正则表达式引擎支持不同的修饰符,下面是一些常见的修饰符:
i:忽略大小写。使得正则表达式不区分大小写。例如,正则表达式"abc"匹配"abc"、"AbC"、"aBC"等。g:全局匹配。使得正则表达式匹配字符串的所有可能。例如,正则表达式"cat"在字符串"cat catcher"中使用全局修饰符可以匹配到两个"cat"。m:多行匹配。使得正则表达式的"^"和"$"修饰符可以分别匹配一行的开头和结尾。例如,正则表达式"^cat$"将匹配"cat"单独一行的情况。s:单行匹配。使得正则表达式的"."可以匹配任意字符,包括换行符。默认情况下,"."匹配除换行符以外的任意字符。x:忽略空白符。使得正则表达式中的空格、制表符等空白符会被忽略,以便更清晰地书写复杂的正则表达式。
需要注意的是,修饰符通常通过特定的语法或方法来应用于正则表达式。具体使用时,需要查阅对应语言或工具的文档以了解正确的修饰符使用方式。
请看一些基本示例
以下是一些示例,演示如何使用修饰符来修改正则表达式的匹配行为:1. 使用修饰符 i 忽略大小写匹配:正则表达式:/cat/i匹配字符串:"cat", "Cat", "CAT" 等。2. 使用修饰符 g 进行全局匹配:正则表达式:/cat/g匹配字符串:"cat cat cat",会找到所有的 "cat"。3. 使用修饰符 m 进行多行匹配:正则表达式:/^cat$/m匹配字符串:
```
cat
cat
cat
```
会匹配每一行的 "cat"。4. 使用修饰符 s 进行单行匹配:正则表达式:/a.b/s匹配字符串:"a\nb",会将 "\n" 当作一个普通字符,而不是换行符。5. 使用修饰符 x 忽略空白符:正则表达式:/a b c/x匹配字符串:"abc",会忽略空格,等效于正则表达式 /abc/。
这只是一些基本示例,实际应用中可以根据具体需求选择适当的修饰符。需要注意的是,不同的语言和工具可能对修饰符的语法有所差异,请查阅相应的文档以获得准确的使用方式。
优先级关系
正则表达式中的元字符和操作符具有特定的优先级关系,用于确定匹配规则的组合顺序。以下是常见的优先级从高到低的顺序:
1. 转义符号:\(反斜杠)用于转义具有特殊意义的字符,例如\.表示匹配实际的"."字符。2. 括号:()(圆括号)用于创建子表达式,并确定它们的作用范围。3. 量词:*、+、?、{n}、{n,}、{n,m}等用于指定重复次数。4. 字符类:[](方括号)用于指定可供选择的字符范围,例如[a-z]表示匹配小写字母。5. 位置匹配符号:^(脱字符)和$(美元符号)用于匹配字符串的开头和结尾。6. 选择符号:|(管道符号)用于表示或的关系,匹配其中一个表达式。
优先级关系决定了正则表达式的组合顺序,从而影响了匹配的结果。当多个元字符或操作符同时出现时,按照优先级进行解析和匹配。需要注意的是,可以使用括号来改变优先级关系,明确指定子表达式的作用范围。在编写复杂的正则表达式时,合理利用优先级关系可以确保匹配规则的准确性和可读性。
re模块的使用
在Python中,re模块是用来进行正则表达式操作的标准库。以下是re模块的一些常见用法:
1. 正则表达式匹配:- re.match(pattern, string):从字符串的起始位置开始匹配,返回一个match对象或None。- re.search(pattern, string):在字符串中搜索第一个匹配项,返回一个match对象或None。- re.findall(pattern, string):找到字符串中所有匹配的子串,并以列表形式返回。- re.finditer(pattern, string):找到字符串中所有匹配的子串,并以迭代器形式返回。2. 匹配对象(match对象)的方法和属性:- group():返回匹配到的字符串。- start():返回匹配字符串的起始位置。- end():返回匹配字符串的结束位置。- span():返回匹配字符串的起始和结束位置。3. 正则表达式的修饰符(可用re.compile()或在pattern中指定):- re.I或re.IGNORECASE:忽略大小写匹配。- re.M或re.MULTILINE:多行匹配。- re.S或re.DOTALL:包括换行符在内的所有字符匹配。4. 字符串操作:- re.split(pattern, string):根据正则表达式的匹配项来分割字符串,返回以列表形式存储的分割结果。- re.sub(pattern, repl, string):用repl替换字符串中匹配到的子串,返回替换后的字符串。- re.subn(pattern, repl, string):与re.sub()方法类似,但同时返回替换次数。
这只是re模块的一些常见用法,还有更多高级功能可以通过阅读官方文档来学习和掌握。在使用re模块时,需要熟悉正则表达式的语法和规则,以及合理应用各种方法和修饰符来实现特定的匹配需求。
接下来我们通过一个小案例来了解一下re
模块中match
、search
和findall
三种匹配方法的使用。
import retext = "Hello, I am a Python developer. Nice to meet you!"# 使用match方法
pattern = r"Hello"
match_result = re.match(pattern, text)
if match_result:print("Match found with match method!")
else:print("No match found with match method.")# 使用search方法
pattern = r"Python"
search_result = re.search(pattern, text)
if search_result:print("Match found with search method!")
else:print("No match found with search method.")# 使用findall方法
pattern = r"\b\w+\b"
findall_result = re.findall(pattern, text)
if findall_result:print("Matches found with findall method:", findall_result)
else:print("No matches found with findall method.")
执行结果:
在这个案例中,我们首先定义了一个待匹配的字符串text,并定义了三个不同的正则表达式模式。然后,我们分别使用match、search和findall方法来查找模式在字符串中的匹配项。
- match方法:它从字符串的开头开始匹配,如果能够找到匹配项,则返回一个match对象。在本例中,match方法可以找到“Hello”这个单词,因为它是字符串的开头。所以match方法返回的结果不是None,从而输出了"Match found with match method!"。
- search方法:它在字符串中进行搜索,如果找到了第一个匹配项,则返回一个match对象。在本例中,search方法可以找到“Python”这个单词,所以search方法返回的结果不是None,从而输出了"Match found with search method!"。
- findall方法:它在字符串中查找所有匹配项,并以列表的形式返回。在本例中,我们的模式是匹配英文单词,所以findall方法能够找到字符串中所有的单词,并返回一个包含这些单词的列表。输出了"Matches found with findall method"和所有的匹配项。
相关文章:

Python基础语法入门(第二十三天)——正则表达式
正则表达式是一种文本模式,用于匹配字符串,它是由字符和特殊字符组成的模式。正则表达式可以用于验证、搜索、替换和提取字符串。其能够应用于各种编程语言和文本处理工具中,如Python、Java、JavaScript等。 正则表达式在线测试工具…...

山西电力市场日前价格预测【2023-08-20】
日前价格预测 预测明日(2023-08-20)山西电力市场全天平均日前电价为341.71元/MWh。其中,最高日前电价为367.66元/MWh,预计出现在20: 30。最低日前电价为318.47元/MWh,预计出现在04: 15。 价差方向预测 1: 实…...

C++中function,bind,lambda
c11之前,STL中提供了bind1st以及bind2nd绑定器 首先来看一下他们如何使用: 如果我们要对vector中的元素排序,首先会想到sort,比如: void output(const vector<int> &vec) {for (auto v : vec) {cout <&l…...

跟着美团学设计模式(感处)
读了着篇文章之后发现真的是,你的思想,你的思维是真的比比你拥有什么技术要强的。 注 开闭原则 开闭原则(Open-Closed Principle)是面向对象设计中的基本原则之一,它的定义是:一个软件实体应该对扩展开放…...

2023/8/19 小红书 Java 后台开发面经
项目都做了些什么,怎么实现的用Redis实现了什么,Redis是单线程的吗,Redis是单线程的为什么快,IO多路复用模型具体实现,持久化怎么实现的为什么用Kafka,架构是什么样的,Broker、Topic、Partition…...

基于traccar快捷搭建gps轨迹应用
0. 环境 - win10 虚拟机ubuntu18 - i5 ubuntu22笔记本 - USB-GPS模块一台,比如华大北斗TAU1312-232板 - 双笔记本组网设备:路由器,使得win10笔记本ip:192.168.123.x,而i5笔记本IP是192.168.123.215。 - 安卓 手机 1.…...

【深度学习-图像识别】使用fastai对Caltech101数据集进行图像多分类(50行以内的代码就可达到很高准确率)
文章目录 前言fastai介绍数据集介绍 一、环境准备二、数据集处理1.数据目录结构2.导入依赖项2.读入数据3.模型构建3.1 寻找合适的学习率3.2 模型调优 4.模型保存与应用 总结人工智能-图像识别 系列文章目录 前言 fastai介绍 fastai 是一个深度学习库,它为从业人员…...

Debian10: 安装nut服务器(UPS)
UPS说明: UPS的作用就不必讲了,我选择是SANTAKTGBOX-850,规格为 850VA/510W,可以满足所需,关键是Debian10自带了驱动可以支持,免去安装驱动,将UPS通过USB线连接服务器即可,如下图所示…...

神经网络基础-神经网络补充概念-47-动量梯度下降法
概念 动量梯度下降法(Momentum Gradient Descent)是一种优化算法,用于加速梯度下降的收敛速度,特别是在存在高曲率、平原或局部最小值的情况下。动量法引入了一个称为“动量”(momentum)的概念,…...

C++11并发与多线程笔记(13) 补充知识、线程池浅谈、数量谈、总结
C11并发与多线程笔记(13) 补充知识、线程池浅谈、数量谈、总结 1、补充一些知识点1.1 虚假唤醒:1.2 atomic 2、浅谈线程池:3、线程创建数量谈: 1、补充一些知识点 1.1 虚假唤醒: notify_one或者notify_al…...

python高级基础
文章目录 python高级基础闭包修饰器单例模式跟工厂模式工厂模式单例模式 多线程多进程创建websocket服务端手写客户端 python高级基础 闭包 简单解释一下闭包就是可以在内部访问外部函数的变量,因为如果声明全局变量,那在后面就有可能会修改 在闭包中的…...

使用线性回归模型优化权重:探索数据拟合的基础
文章目录 前言一、示例代码二、示例代码解读1.线性回归模型2.MSE损失函数3.优化过程4.结果解读 总结 前言 在机器学习和数据科学中,线性回归是一种常见而重要的方法。本文将以一个简单的代码示例为基础,介绍线性回归的基本原理和应用。将使用Python和Nu…...

亿级短视频,如何架构?
说在前面 在尼恩的(50)读者社群中,经常指导大家面试架构,拿高端offer。 前几天,指导一个年薪100W小伙伴,拿到字节面试邀请。 遇到一个 非常、非常高频的一个面试题,但是很不好回答࿰…...

jenkins pipeline方式一键部署github项目
上篇:jenkins一键部署github项目 该篇使用jenkins pipeline-script一键部署,且介绍pipeline-scm jenkins环境配置 前言:按照上篇创建pipeline任务,结果报mvn,jdk环境不存在,就很疑惑,然后配置全…...

Vue 项目搭建
环境配置 1. 安装node.js 官网:nodejs(推荐 v10 以上) 官网:npm 是什么? 由于vue的安装与创建依赖node.js(JavaScript的运行环境)里的npm(包管理和分发工具)ÿ…...

【NetCore】09-中间件
文章目录 中间件:掌控请求处理过程的关键1. 中间件1.1 中间件工作原理1.2 中间件核心对象 2.异常处理中间件:区分真异常和逻辑异常2.1 处理异常的方式2.1.1 日常错误处理--定义错误页的方法2.1.2 使用代理方法处理异常2.1.3 异常过滤器 IExceptionFilter2.1.4 特性过…...

机器学习深度学习——BERT(来自transformer的双向编码器表示)
👨🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——transformer(机器翻译的再实现) 📚订阅专栏:机器学习&am…...

Datawhale Django后端开发入门 Vscode TASK02 Admin管理员、外键的使用
一.Admin管理员的使用 1、启动django服务 使用创建管理员之前,一定要先启动django服务,虽然TASK01和TASK02是分开的,但是进行第二个流程的时候记得先启动django服务,注意此时是在你的项目文件夹下启动的,时刻注意要执…...

【ES5和ES6】数组遍历的各种方法集合
一、ES5的方法 1.for循环 let arr [1, 2, 3] for (let i 0; i < arr.length; i) {console.log(arr[i]) } // 1 // 2 // 32.forEach() 特点: 没有返回值,只是针对每个元素调用func三个参数:item, index, arr ;当前项&#…...

学科在线教育元宇宙VR虚拟仿真平台落实更高质量的交互学习
为推动教育数字化,建设全民终身学习的学习型社会、学习型大国,元宇宙企业深圳华锐视点深度融合VR虚拟现实、数字孪生、云计算和三维建模等技术,搭建教育元宇宙平台,为学生提供更加沉浸式的学习体验,提高学习效果和兴趣…...

[python爬虫] 爬取图片无法打开或已损坏的简单探讨
本文主要针对python使用urlretrieve或urlopen下载百度、搜狗、googto(谷歌镜像)等图片时,出现"无法打开图片或已损坏"的问题,作者对它进行简单的探讨。同时,作者将进一步帮你巩固selenium自动化操作和urllib…...

vue项目预览pdf功能(解决动态文字无法显示的问题)
最近,因为公司项目需要预览pdf的功能,开始的时候找了市面上的一些pdf插件,都能用,但是,后面因为pdf变成了需要根据内容进行变化的,然后,就出现了需要动态生成的文字不显示了。换了好多好多的插件…...

vue3 样式穿透:deep不生效
初学vue3,今天需要修改el-input组件的属性(去掉border和文字居右) 网上搜了一下,大致都是采用:deep 样式穿透来修改el-input的属性 <div class"input-container"><el-input placeholder"请输入111&qu…...

云原生反模式
通过了解这些反模式并遵循云原生最佳实践,您可以设计、构建和运营更加强大、可扩展和成本效益高的云原生应用程序。 1.单体架构:在云上运行一个大而紧密耦合的应用程序,妨碍了可扩展性和敏捷性。2.忽略成本优化:云服务可能昂贵&am…...

【2023年11月第四版教材】《第5章-信息系统工程(合集篇)》
《第5章-信息系统工程(合集篇)》 章节说明1 软件工程1.1 架构设计1.2 需求分析1.3 软件设计1.4 软件实现[补充第三版教材内容] 1.5 部署交付 2 数据工程2.1 数据建模2.2 数据标准化2.3 数据运维2.4 数据开发利用2.5 数据库安全 3 …...

【qiankun】微前端在项目中的具体使用
1、安装qiankun npm install qiankun --save2、主应用中注册和配置qiankun 在主应用的入口文件main.ts中,引入qiankun的注册方法: import { registerMicroApps, start } from qiankun;创建一个数组,用于配置子应用的相关信息。每个子应用都…...

云安全与多云环境管理:讨论在云计算和多云环境下如何保护数据、应用程序和基础设施的安全
随着云计算和多云环境的广泛应用,企业正面临着数据、应用程序和基础设施安全的新挑战。在这个数字化时代,保护敏感信息和业务运作的连续性变得尤为重要。本文将深入探讨在云计算和多云环境下如何有效地保护数据、应用程序和基础设施的安全。 章节一&…...

npm install ffi各种失败,换命令npm i ffi-napi成功
网上各种帖子安装ffi,基本上到了windows build tools这里会卡住。 使用命令npm install --global --production windows-build-tools 安装报错信息如下: PS E:\codes\nodejsPath\tcpTest> npm install --global --production windows-build-tools …...

0.flink学习资料
论文: (1)google dataflow model 下载链接:p1792-Akidau.pdf (vldb.org) Akidau T, Bradshaw R, Chambers C, et al. The dataflow model: a practical approach to balancing correctness, latency, and cost in massive-scal…...

C语言:字符函数和字符串函数
往期文章 C语言:初识C语言C语言:分支语句和循环语句C语言:函数C语言:数组C语言:操作符详解C语言:指针详解C语言:结构体C语言:数据的存储 目录 往期文章前言1. 函数介绍1.1 strlen1.…...