正则表达式(复习)
文章目录
- 一、[]: 一个字符集合
- 二、{}: 重复次数
- 三、特殊符号
- 四、(): 分组
- 五、python代码示例
- 六、注意
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
一、[]: 一个字符集合
[]被称为字符类,用于定义一个字符集合,匹配该集合中任意一个字符。
在方括号内列出所有可能匹配的字符,正则表达式会匹配方括号中任意一个字符。
| 特殊符号 | 含义 |
|---|---|
| - | 来表示一个字符范围 |
| ^ | 表示排除方括号中指定的字符,例如:[ ^0-9] 非数字 |
| \d | [0-9] |
| \D | [^0-9] |
| \w | [a-zA-Z0-9_] |
| \W | [^a-zA-Z0-9_] |
| \s | 匹配任意空白字符,包括空格、制表符、换行符等 |
| \S | 匹配任意非空白字符 |
| \b | 单词边界,匹配单词的开始或结束位置,例如:\bcat\b匹配独立的单词 cat,而不会匹配 category 中的 cat |
| \B | 非单词边界,匹配不在单词开始或结束的位置,例如:\Bing\B 对于 string 中的 ing 会匹配,而对于 sing 则不匹配 |
二、{}: 重复次数
{}被称为量词,用于指定前面的元素(字符、字符类或分组)出现的次数。
| 特殊符号 | 含义 |
|---|---|
| + | {1, } 1次以上 |
| * | {0,} 0次以上 |
| ? | {0,1} 0次或1次、注:跟在 *、+、{} 等后面时,表示非贪婪匹配 |
| . | 匹配任意一个字符(换行除外) |
三、特殊符号
| 特殊符号 | 含义 |
|---|---|
| ^ | 匹配开始的字符串 |
| $ | 匹配结尾的字符串 |
| \ | 转译符,例如:\. 匹配 .、\d 匹配任意数字(等价于 [0-9]) |
| | | 或者。例如:[a|b] |
四、(): 分组
- 分组,将多个字符组合成一个整体
- 创建捕获组,保存匹配内容
- 创建非捕获组(
(?:))- 反向引用(
\数字)
- 分组,将多个字符组合成一个整体
import re# 匹配连续出现两次的 "ab"
pattern = r'(ab){2}'
text = 'abababc'
result = re.findall(pattern, text)
print(result) # ['ab']
- 创建捕获组,保存匹配内容
import re# 匹配日期,格式为 "年-月-日",并捕获年、月、日
pattern = r'(\d{4})-(\d{2})-(\d{2})'
text = 'Today is 2024-10-15.'
result = re.search(pattern, text)
if result:print("Full match:", result.group(0)) # Full match: 2024-10-15print("Year:", result.group(1)) # Year: 2024print("Month:", result.group(2)) # Month: 10print("Day:", result.group(3)) # Day: 15
- 创建非捕获组(
(?:))
import re# 使用非捕获组匹配 "abc" 或 "def" 后面跟着一个数字
pattern = r'(?:abc|def)\d'
text = 'abc1 def2 ghi3'
result = re.findall(pattern, text)
print(result) # ['abc1', 'def2']
- 反向引用(
\数字)
import re# 匹配连续出现两次相同的单词
pattern = r'(\b\w+\b)\s+\1'
text = 'hello hello world'
result = re.findall(pattern, text)
print(result) # ['hello']
五、python代码示例
在Python中,使用re模块来实现正则表达式。
import re
regex = 'a'
string = 'abc'# 1. re.search(regex, string)
# 检查这个字符串string是否匹配正则表达式
if re.search(regex, string) is not None:print(string) # abc# 2. results = re.findall(regex, string)
# 匹配带正则表达式的那部分字符串
string = '2014 was a good year, but 2025 will be better!'
years = re.findall('[1-2][0-9]{3}', string)
print(years) # ['2014', '2025']# 3. result.group(0)
# 分组提取,见上面分组
六、注意
正则表达式里使用\作为转义字符
假如你需要匹配文本中的字符\,name编程语言表示的正则表达式需要4个反斜杠\\\\,前两个和后两个分别用于在编程语言中转义成反斜杠,转换成两个反斜杠后再在正则表达式中转义成一个反斜杠。Python中的原生字符串很好的解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d",不需要再担心是否漏写了反斜杠,写出来的表达式也更直观。
import reif re.search("\\\\", "I have one nee\dle") is not None:print("Match")
else:print("Not Match")
import reif re.search(r"\\", "I have one nee\dle") is not None:print("Match")
else:print("Not Match")
相关文章:
正则表达式(复习)
文章目录 一、[]: 一个字符集合二、{}: 重复次数三、特殊符号四、(): 分组五、python代码示例六、注意 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个…...
sonarqube+SonarScanner+postpresql+jenkins
本地执行参考这篇 sonarqubeSonarScannerPostgreSQL实现代码质量扫描(windows)_sonarqube 10.7部署-CSDN博客 集成到Jenkins中操作如下 在 Jenkins 中安装 SonarQube Scanner 和配置 Job 1、安装 SonarQube Scanner 插件: 在 Jenkins 的管理…...
牛客周赛Round 84
本场比赛难度不大,也是本人第一次AK,最后一题用组合数学推公式,本篇博客主要讲解最后一题的思路 G-小红的陡峭值(五)(hard)_牛客周赛 Round 84 思路:本题要我们求p/q mod M ,即p*&am…...
TDengine 配置 ODBC 数据源
简介 TDengine ODBC 是为 TDengine 实现的 ODBC 驱动程序,支持 Windows 系统的应用(如 PowerBI 等)以及用户自定义开发的应用程序,通过 ODBC 标准接口访问本地、远程和云服务的 TDengine 数据库。 TDengine ODBC 提供基于 WebSo…...
numpy常用函数详解
在深度神经网络代码中经常用到numpy库的一些函数,很多看过之后很容易忘记,本文对经常使用的函数进行归纳总结。 np.arange arange是numpy一个常用的函数,该函数主要用于创建等差数列。它的使用方法如下所示: numpy.arange([star…...
deepseek 3FS编译
3FS在ubuntu22.04下的编译(记录下编译过程,方便后续使用) 环境信息 OS ubuntu 22.04内核版本 6.8.0-52-genericlibfuse 3.16.1rust 1.75.0FoundationDB 7.1.66meson 1.0.0ninja 1.10.1 libfuse编译 以下建议均在root下执行 pip3 install…...
【CXX】6.2 str — rust::Str
Rust::Str 公共 API // rust/cxx.hclass Str final { public:Str() noexcept;Str(const Str &) noexcept;Str(const String &) noexcept;// 如果输入不是 UTF-8,抛出 std::invalid_argument 异常。Str(const std::string &);Str(const char *);Str(con…...
制作三维软件学习路线
制作三维软件是一项复杂而富有挑战性的任务,涉及多个领域的知识。下面是一个建议的学习路线,涵盖从基础到高级的知识和技能。你可以根据自己的背景和兴趣进行调整。 ### 1. 编程基础 - **学习编程语言**:C或Python是常用的语言,了…...
【RabbitMQ】事务
事务的简单配置及使用 配置事务管理器声明队列生产者代码测试 RabbitMQ是基于AMQP协议实现的,该协议实现了事务机制,因此RabbitMQ也支持事务机制. SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的,…...
常见的交换机端口类型
在计算机网络中,Access端口 和 Trunk端口 是两种常见的交换机端口类型,主要用于VLAN(虚拟局域网)的配置。它们的主要区别在于如何处理VLAN标签和数据帧。 1. Access端口 Access端口通常用于连接终端设备(如PC、打印机…...
Linux Shell 脚本编程极简入门指南
一、学习前提准备 ✅ 环境要求: Linux系统(Ubuntu/CentOS等)或 WSL (Windows用户) 任意文本编辑器(推荐VSCode/Vim) 基础命令行操作能力 🔍 验证环境: # 查看系统默认Shell echo $SHELL #…...
【医院管理会计专题】7.解锁本量利分析:医院医疗服务决策的智慧密码
医院成本核算、绩效管理、运营统计、内部控制、管理会计专题索引 一、引言 在当今医疗行业竞争日益激烈的背景下,医院管理面临着诸多挑战,如何实现高效运营、提升服务质量并控制成本成为关键问题。管理会计作为一种重要的管理工具,在医院管理中发挥着越来越重要的作用。本…...
Kotlin和Java区别
哈哈哈,前段时间,面试的时候,突然问到我Kotlin和Java的区别,一下子把我问懵逼了,确实没遇到问这个的,想了下,说了下Kotlin的编译时空检查机制,代码更简洁,很多封装好的AP…...
Taro 面试题
基础概念 1. Taro 是什么?它的核心特点有哪些? Taro 是京东开源的 多端统一开发框架,基于 React 语法,可编译到 微信小程序、H5、React Native 等多个端。 核心特点: 多端适配:一套代码运行多个端支持 …...
Java部署在window启动报unable tocreate tempdir
在Windows系统中,Java应用在运行时会试图在默认的临时目录中创建文件。该临时目录通常由系统环境变量TEMP或TMP指定。如果这些变量设置不正确、指向一个无效的路径,或者操作系统的权限不足,就会导致“Unable to create tempdir”错误。 解决…...
基于deepseek和开放题库,构建专业大模型微调在线答题系统
为什么要进行大模型微调 大模型微调是将预训练模型适配到特定任务或领域的关键技术,正常情况下大模型通过海量通用数据训练获得广泛知识,但其参数和表征空间面向通用场景,难以直接适配垂直领域或复杂任务。例如在通用医疗问答模型在具体病症诊…...
ios 小组件和数据共享
创建主工程就不必讲了 1 创建小组件 创建子工程 [new Target ] 选择 [ Widger Extension] 小组件入口是WidgetBundle文件,可以进行多个小组件的调试 TestWidget2文件是主要操作,小组件使用swiftUI布局,使用 AppIntent进行事件处理ÿ…...
LVTTL(Low Voltage Transistor-Transistor Logic)电平详解
一、LVTTL电平的定义与核心特性 LVTTL(低压晶体管-晶体管逻辑)是传统TTL(5V)的低电压版本,工作电压通常为3.3V,旨在降低功耗并适配现代低电压集成电路,同时保持与TTL的逻辑兼容性。其核心特点如…...
element tree树形结构默认展开全部
背景: el-tree树形结构,默认展开全部,使用属性default-expand-all【是否默认展开所有节点】;默认展开一级,设置default-expanded-keys【默认展开的节点的 key 的数组】属性值为数组。 因为我这里的数据第一级是四川【省…...
统计登录系统10秒内连续登录失败超过3次的用户
为防止暴力破解用户账号的行为,在输入账号和密码时一般都会限制用户尝试密码输出错误的次数,如果用户多次输错密码后,将在一段时间内锁定账号,常见的有银行类APP、个税App等应用,如下是用户账号密码输入错误的提示图&a…...
Debian/Ubuntu 上 KVM 虚拟化环境搭建全攻略:从源码到实战
Debian/Ubuntu 上 KVM 虚拟化环境搭建全攻略:从源码到实战 在当今云计算和容器化技术蓬勃发展的时代,虚拟化技术依然是基础设施领域不可或缺的基石。KVM(Kernel-based Virtual Machine)作为Linux内核原生支持的虚拟化解决方案&…...
别再只用命令行!Pycharm内置Database工具连接SQLite3的5个高效技巧(含文件路径避坑)
别再只用命令行!Pycharm内置Database工具连接SQLite3的5个高效技巧(含文件路径避坑) 作为一名长期与SQLite3打交道的Python开发者,你是否还在反复切换终端和代码编辑器,用命令行执行sqlite3 test.db?或是为…...
Uvicorn源码中的中介者模式:组件通信与解耦设计
Uvicorn源码中的中介者模式:组件通信与解耦设计 【免费下载链接】uvicorn An ASGI web server, for Python. 🦄 项目地址: https://gitcode.com/GitHub_Trending/uv/uvicorn Uvicorn作为Python生态中流行的ASGI web服务器,其内部架构巧…...
OpenClaw压力测试:Qwen3-VL:30B在飞书中的并发处理能力
OpenClaw压力测试:Qwen3-VL:30B在飞书中的并发处理能力 1. 为什么需要测试个人场景下的并发能力? 上周我在飞书群里部署了一个基于OpenClawQwen3-VL:30B的智能助手,原本只是想让同事帮忙测试基础功能。没想到午休时间突然有十几个人同时机器…...
ROS小车导航避坑指南:move_base + AMCL + TEB 配置全流程与常见问题排查
ROS导航实战:从AMCL定位到TEB路径规划的避坑手册 当你的机器人在地图上疯狂转圈、对着墙壁直冲或者干脆拒绝移动时,导航栈的调试就变成了充满挫败感的解谜游戏。本文将带你穿越move_base、AMCL和TEB配置的迷雾森林,用工程化的排查思路解决那些…...
Windows下OpenClaw安装避坑:ollama-QwQ-32B接口对接详解
Windows下OpenClaw安装避坑:ollama-QwQ-32B接口对接详解 1. 为什么选择OpenClawollama-QwQ-32B组合 去年我在尝试自动化处理日报和周报时,发现市面上的RPA工具要么太笨重,要么需要频繁录制操作。直到遇到OpenClaw这个开源框架,它…...
EasyMQTT嵌入式MQTT轻量封装原理与实战
1. EasyMQTT 库深度解析:面向嵌入式工程师的 MQTT 轻量级封装实践EasyMQTT 并非一个通用型 MQTT 客户端抽象层,而是一个高度场景化、面向特定 IoT 生态闭环设计的固件级通信中间件。其核心价值不在于协议栈功能的完备性,而在于将 ESP32/ESP82…...
3个颠覆性技巧:让Mermaid文本图表成为你的效率倍增器
3个颠覆性技巧:让Mermaid文本图表成为你的效率倍增器 【免费下载链接】mermaid mermaid-js/mermaid: 是一个用于生成图表和流程图的 Markdown 渲染器,支持多种图表类型和丰富的样式。适合对 Markdown、图表和流程图以及想要使用 Markdown 绘制图表和流程…...
两个线程对socket 进行读和写,需要加锁吗
同一个 socket,一个线程只读、一个线程只写 → 不需要加锁!同一个 socket,两个线程都可能读 / 都可能写 → 必须加锁!我给你用最简单、最直白、Linux 官方规则讲清楚👇1. 官方 POSIX / Linux 规定(黄金定律…...
STM32硬件定时器中断库:零HAL依赖多实例调度
1. 项目概述STM32_TimerInterrupt是一个面向 STM32 全系列微控制器(覆盖 F0/F1/F2/F3/F4/F7/L0/L1/L4/G0/G4/H7/WB/MP1 等主流型号)的轻量级、高可靠硬件定时器中断驱动库。其核心设计目标是在不依赖 HAL 库底层阻塞逻辑的前提下,提供稳定、低…...
