Python 正则表达式2 语法基础

embedded/2024/9/22 21:33:55/

内容概述

正则表达式是由普通字符(例如"a",“b”,“c"等)以及特殊字符(例如”+“,”-“,”^"等)组成的文字模式。举个例子,[a-z]这个正则表达式就代表了匹配所有的小写字母(“a”,“b”,“c”,…,“y”,“z”),相关示例代码如下:

python">import re# 定义正则表达式模式
pattern = r'[a-z]'
# 待匹配的字符串
text = "AaBbCcDdEeFfG"
# 使用 split() 函数进行分割
split_text = re.split(pattern, text)
print(split_text)

输出

['A', 'B', 'C', 'D', 'E', 'F', 'G']

一般大写字母,小写字母,数字均为普通字符,其他字符中一部分是有特别含义的特殊字符(如"-"),其余部分为普通字符。特殊字符需要在后面的语法规则里面慢慢了解,记忆和掌握。

基本规则

正则表达式如果全面详细描述,其实语法内容也不少,但从实际应用来看,掌握小部分精华的规则就足够了。说实话,学习太多的规则,一来是记不住,二来是大概率用不上,所以从实用主义看没必要学习太多规则。

掌握三条核心规则就行:输入限定规则数量限定规则符号限定规则

输入限定规则

匹配输入[],匹配 […] 中的所有字符;匹配不输入[^],匹配除了 […] 中字符的所有字符。

举个例子,[abc][^abc],代码如下:

python">import re# 定义正则表达式模式
pattern = r'[abc]'
# 待匹配的字符串
text = "a1b2c3"
# 使用 split() 函数进行分割
split_text = re.split(pattern, text)
print(split_text)pattern = r'[^abc]'
split_text = re.split(pattern, text)
print(split_text)

输出

['', '1', '2', '3']
['a', 'b', 'c', '']

数量限定规则

如何控制匹配的字符数量呢?可以给符号后面加上有关数量的限定规则,比如n个a就表示为[a]{n},一个以上数量的a就表示为[a]+,也就是输入限定+数量限定的形式。看下面例子(注意,+对数量的匹配默认是贪婪的,来多少就吃多少,比如aaa只匹配1个结果,而不是3个分别匹配的a,要想反过来非贪婪,后面再加?即可):

python">import re# 待匹配的字符串
text = "I have three aaa."pattern = r'[a]{1}'
# 使用 split() 函数进行分割
split_text = re.split(pattern, text)
print(split_text)pattern = r'[a]{2}'
split_text = re.split(pattern, text)
print(split_text)pattern = r'[a]+'
split_text = re.split(pattern, text)
print(split_text)pattern = r'[a]+?'
split_text = re.split(pattern, text)
print(split_text)

输出

['I h', 've three ', '', '', '.']
['I have three ', 'a.']
['I h', 've three ', '.']
['I h', 've three ', '', '', '.']

更多参考:

* 零次或多次,贪婪模式
+ 一次或多次,贪婪模式
? 零次或一次
*? 零次或多次,非贪婪模式
+? 一次或多次,非贪婪模式
{n} n 次
{n,} 至少n次
{n,m} n到m次
{0,n} 最多n次

符号限定规则

首先得说明,正则表达式里面的括号()和四则运算一样能说明和改变运算的优先级,比如[a][b]{10}([a][b]){10}是不一样的,为了保证运算正确,需要用括号把[a][b]括起来才能保证我们要得到的是10个ab,不然没有括号就是a加10个b,因为数量限定会优先与前面一个输入限定进行运算。其次,有时候输入限定的括号[]也不是必须的,比如可以’(ab){10}’

除了普通字符,有些字符也有特殊含义,如下:

A-Z 大写字母
a-z 小写字母
0-9 一位数字
. 除换行符(\n、\r)之外的任何单个字符
\s 所有空白符,包括换行
\S 非空白符,不包括换行
\w 字母、数字、下划线
\d 任意一个阿拉伯数字(0 到 9)
\n 换行符
\r 回车符
\t 制表符
| 或,比如a|b表示a或b中的一个
\ 转义特殊符,如需要输入+就转义\+

符号限定里面的字符优先级地位差不多和普通字符一样,就类似文本里面的换行符用\n去表示一样


http://www.ppmy.cn/embedded/30908.html

相关文章

第十五届蓝桥杯省赛大学B组(c++)

很幸运拿了辽宁赛区的省一,进入6月1号的国赛啦... 这篇文章主要对第十五届省赛大学B组(C)进行一次完整的复盘,这次省赛2道填空题6道编程题: A.握手问题 把握手情景看成矩阵: 粉色部分是7个不能互相捂手的情况 由于每个人只能和其他人捂手, 所以黑色情况是不算的 1和2握手2和…

鸿蒙OpenHarmony【标准系统 烧录】(基于RK3568开发板)

烧录 烧录是指将编译后的程序文件下载到芯片开发板上的动作,为后续的程序调试提供基础。DevEco Device Tool提供一键烧录功能,操作简单,能快捷、高效的完成程序烧录,提升烧录的效率。 RK3568的镜像烧录通过Windows环境进行烧录&…

uniapp+axios请求的封装

uniappaxios请求的封装 因在用vue3.0时会导致无法引有buildFullPath和settle两个库。所简单处理这两个方法 // utils/request.ts文件代码如下 /***uniappaxios请求的封装 **/import axios from axios import $config from "/config/config" import {getToken,remo…

简单记录一下在linux中安装pytorch成功!

1. 安装版本 pytorch版本:2.0.0 torchvision版本:0.15.0 torchaudio版本:2.0.0 cuda版本:cuda11.8 python版本:3.9 # CUDA 11.8 pip install torch2.0.0cu118 torchvision0.15.1cu118 torchaudio2.0.1 --index-url https://download.py…

堆排序以及TOP-K问题

片头 嗨!小伙伴们,大家好!今天我们来深入理解堆这种数据结构,分析一下堆排序以及TOP-K问题,准备好了吗?我要开始咯! 一、堆排序 这里我们先假设要排成升序,也就是从左到右&#xf…

Nacos AP 和CP 切换-理论

😀前言 本篇博文是关于Nacos AP 和CP 切换-理论,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力&…

和鲸科技出席第五届空间数据智能学术会议,执行总裁殷自强受邀发表主题报告

4月26日,由 ACM SIGSPATIAL 中国分会、ACM SIGMOD 中国分会主办的第五届空间数据智能学术会议(SpatialDI 2024,下简称“会议”)在南京盛大开幕。本次会议特邀李清泉院士、周成虎院士、丛高教授、谢炯博士、张雪英教授等国内外知名…

GD32E103C8T6 封装LQFP-48 GigaDevice(兆易创新) 单片机

GD32E103C8T6 是由GigaDevice(兆易创新)公司生产的一款基于ARM Cortex-M4内核的32位MCU(微控制器)。以下是GD32E103C8T6的一些主要功能和参数介绍: 主要功能: 高性能ARM Cortex-M4内核: 采用120MHz的ARM …