Python 正则表达式2 语法基础

内容概述

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

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],代码如下:

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,要想反过来非贪婪,后面再加?即可):

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.mfbz.cn/a/583718.html

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

相关文章

vue2 实现echarts图表进入可视区域后再加载动画,以及 使用了resize之后,动画失效问题解决

Intersection Observer API 是一个现代的浏览器 API,用于监测一个或多个目标元素与其祖先元素或视窗(viewport)之间的交叉状态(intersection)的变化。它可以有效地监听元素是否进入或离开可视区域,从而实现…

使用OkHttp 缓存 API 调用提高Android应用性能

使用OkHttp 缓存 API 调用提高Android应用性能 坦率地说,我们都遇到过这样的情况——焦急地刷新应用,看着加载图标不停地旋转,等待那个至关重要的 API 响应。这样的等待我们已经是炉火纯青了,是吧?手指有节奏地轻敲屏…

记录些RAG-Fusion、Agent、NL2SQL的问题

RAG-Fusion RAG-Fusion 的实现原理 Query Duplication with a Twist:用 LLM 根据用户的 Query 生成几个相关的但不同的 Queries。Vector Search Unleashed:对原 Query 和生成的 Queries 都进行向量(或者其他方式的)搜索。Intell…

基于Springboot的滑雪场管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的滑雪场管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&a…

摩根大通推出创新工具 FlowMind,引领金融自动化新变革

近日,摩根大通人工智能研究部推出了一款极具创新性的工具——FlowMind,为金融行业带来了全新的工作模式和效率提升。 FlowMind 能够自动化金融工作流程,在信贷审批、风险评估、合规监测等重要任务中发挥着关键作用。它利用 GPT 自动生成工作…

泽攸科技无掩膜光刻机在MEMS压力传感器制造中的应用

在当今的科技快速发展时代,微电子机械系统(MEMS)技术已成为推动现代传感器技术革新的关键力量。MEMS压力传感器,作为其中的重要分支,广泛应用于生物医学、航空航天、汽车工业等多个领域。随着对传感器性能要求的不断提…

探索Jellyfin:支持Android的自由开源的媒体服务器平台

探索Jellyfin:支持Android的自由开源的媒体服务器平台 I. 简介 A. 什么是Jellyfin? Jellyfin是一个自由开源的媒体服务器平台,旨在让用户能够自主管理和流式传输他们的媒体内容。与许多闭源的商业媒体服务器解决方案不同,Jelly…

基于ESP32—CAM物联网WIFI小车

一.功能概述 摄像头的画面可以实时的传输到,点灯科技APP的手机端,这样可以实时查看周围环境的状况,灯光不足,画面不清晰时可以打开灯光照明。手机端有左转、右转、前进、后退、停止的按钮。可以根据自己需要,来控制小车…

美国站群服务器上常见的操作系统选择指南

美国站群服务器上常见的操作系统选择指南 美国站群服务器的选择操作系统对于服务器的性能和功能至关重要。本文将为您介绍在美国站群服务器上常见的操作系统选择指南,以帮助您做出明智的决策。 在选择美国站群服务器时,选择合适的操作系统是至关重要的…

SMTP服务器搭建的注意事项?如何配置SMTP?

SMTP服务器搭建的步骤有哪些?SMTP服务器的搭建方法? SMTP服务器作为电子邮件传输的核心组件,其搭建过程中的每一个细节都至关重要。AokSend将详细探讨SMTP服务器搭建的注意事项,帮助您轻松搭建一个高效、安全的SMTP服务器。 SMT…

Flutter创建自定义的软键盘

参考代码: Flutter - Create Custom Keyboard Examples 本文贴出的代码实现了一个输入十六进制数据的键盘: (1)支持长按退格键连续删除字符; (2)可通过退格键删除选中的文字; &…

02 - 步骤 Kafka consumer

简介 Kafka consumer 步骤,用于连接和消费 Apache Kafka 中的数据,它可以作为数据管道的一部分,将 Kafka 中的数据提取到 Kettle 中进行进一步处理、转换和加载,或者将其直接传输到目标系统中。 使用 场景 我需要订阅一个Kafka的数据&…

网络安全之密码学技术

文章目录 网络信息安全的概念数据加密|解密概念密码学概论密码学分类古典密码学现代密码学 现代密码学的相关概念对称加密算法对称加密算法—DES对称加密算法—3DES对称加密算法—AES对称加密算法—IDEA 非对称加密算法非对称加密算法—RSA非对称加密算法—ElGamal非对称加密算…

Reactor Netty-响应式编程-010

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace 为什么不…

Objective-C大爆炸:从零到单例模式

oc学习笔记(一) 文章目录 oc学习笔记(一)oc与c语言的区别#import的用法foundation框架NSLog函数NSString类型符号的作用oc中的数据类型 类与对象概念: 创建第一个类类的定义类的实现类加载对象的产生和使用 self语法id…

GaussDB数据库事务管理

一、引言 事务管理是数据库系统中至关重要的一部分,它确保了数据库的一致性和可靠性。在GaussDB数据库中,事务管理不仅遵循传统的ACID特性,还提供了一些高级功能。本文将深入探讨GaussDB数据库事务管理的各个方面。 二、事务的基本概念 2.1…

前端页面单元测试最佳策略:全面涵盖逻辑、组件、流程、UI及性能优化测试,全面保障软件应用的质量

页面级别的测试要求我们从更宏观的角度审视应用,不仅关注单个组件的正确性,还要确保组件间的协作无误,以及用户在应用中的完整体验。通过集成测试、E2E测试和场景测试,我们可以更全面地覆盖应用的各种使用情况,提高软件…

Educational Codeforces Round 165 (Rated for Div. 2) (C、D)

1969C - Minimizing the Sum 题意: 思路:观察到操作数很小,最值问题操作数很容易想到dp,用表示第个元素,操作了次的最小值总和,转移的时候枚举连续操作了几次即可,而连续操作了几次即将全部变成…

机器学习:基于Sklearn、XGBoost框架,使用逻辑回归、支持向量机和XGBClassifier来诊断并预测一个人是否患有自闭症

前言 系列专栏:机器学习:高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学…

Linux硬盘挂载操作记录

文章目录 1.前置概念2.挂载步骤2.1查看盘信息2.2挂载整个盘到指定目录2.3将盘划分为多个分区并挂载到不同目录2.3.1创建分区2.3.2指定文件系统2.3.3挂载目录 3.删除分区 1.前置概念 分区:分区就是将硬盘划分为多个区域,每个区域都有自己的文件系统&…
最新文章