正则表达式-笔记

文章目录

  • 一、正则表达式
  • 二、正则表达式的基本语法
    • 字符类
      • 普通字符
      • 非打印字符
      • 特殊字符
    • 量词限定符
    • 锚点
    • 修饰符(标记)
  • 三、在 Python 中使用正则表达式
    • 简单搜索
    • 提取信息
    • 替换文本
  • 参考

从验证用户输入,到从大量文本中提取特定信息,再到进行复杂的文本替换, 正则表达式搜索凭借其强大的模式匹配能力。软件RegexBuddy安装介绍参考[2]

一、正则表达式

正则表达式,简而言之,是一种用于描述字符串模式的语法。这些模式可以非常简单,比如匹配一个特定的字符或字符串;也可以极为复杂,组合多个字符类、量词和运算符,以匹配各种复杂的文本模式。在 Python、JavaScript 等编程语言中,都内建了对正则表达式的支持,方便开发者使用。

二、正则表达式的基本语法

字符类

普通字符

字符类允许我们匹配一类字符中的任意一个。

字符描述
[abc]匹配 a、b 或 c 中的任意一个字符,方括号内可以使用连字符 - 表示范围
[^abc]匹配 除a、b 或 c 中的所有字符
[0-9]表示匹配任意一个数字
[A-Z]匹配任意一个大写字母
[\s\S]匹配所有。 \s是匹配所有空白符,包括换行;\S非空白符,不包括换行
\w匹配字母、数字、下环线。等价于[A-Za-z0-9_]

非打印字符

字符描述
\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

特殊字符

字符描述
$匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。
( )标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用
.匹配除换行符 \n 之外的任何单字符
[标记一个中括号表达式的开始
\将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n’ 匹配字符 ‘n’。‘\n’ 匹配换行符
^匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合
{标记限定符表达式的开始
|指明两项之间的一个选择

量词限定符

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 ***** 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种。

字符描述
*匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。
+匹配前面的子表达式一次或多次。例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。
?匹配前面的子表达式零次或一次。例如,“do(es)?” 可以匹配 “do” 、 “does” 中的 “does” 、 “doxy” 中的 “do” 。? 等价于 {0,1}。
{n}n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
{n,}n 是一个非负整数。至少匹配n 次。例如,‘o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。‘o{1,}’ 等价于 ‘o+’。‘o{0,}’ 则等价于 ‘o*’。
{n,m}m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,“o{1,3}” 将匹配 “fooooood” 中的前三个 o。‘o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。

* 和 +限定符都是贪婪的,它们会尽可能多的匹配文字,但在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。

锚点

锚点用于指定匹配的位置。

字符描述
^表示匹配字符串的开头
$表示匹配字符串的结尾
\b陪陪单词边界,即单词与空格间的位置
\B非单词边界匹配

比如,^hello 只匹配以 hello 开头的字符串,world$ 只匹配以 world 结尾的字符串。

注意:不能将限定符与定位符一起使用。由于在紧靠换行或者单词边界的前面或后面不能有一个以上位置,因此不允许诸如 ^* 之类的表达式。

修饰符(标记)

标记也称为修饰符,正则表达式的标记用于指定额外的匹配策略。
标记不写在正则表达式里,标记位于表达式之外,格式如下:

/pattern/flags
修饰符描述
iignore - 不区分大小写 将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。
gglobal - 全局匹配 查找所有的匹配项。
mmulti line - 多行匹配 使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。
s特殊字符圆点 . 中包含换行符 \n 默认情况下的圆点 . 是 匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。

三、在 Python 中使用正则表达式

Python 通过 re 模块支持正则表达式操作。下面我们通过几个示例来展示如何在 Python 中使用正则表达式进行搜索。

简单搜索

import retext = "The quick brown fox jumps over the lazy dog."
match = re.search(r"fox", text)
if match:print(f"找到匹配项:{match.group()}")

在上述代码中,re.search 函数在字符串 text 中搜索模式 fox,如果找到匹配项,就打印出匹配的内容。

提取信息

假如我们有一个包含日期的字符串,格式为 YYYY - MM - DD,想提取出年、月、日的信息。

date_text = "2023-05-15"
match = re.match(r"(\d{4})-(\d{2})-(\d{2})", date_text)
if match:year, month, day = match.groups()print(f"年:{year},月:{month},日:{day}")

re.match 函数从字符串开头进行匹配,圆括号 () 用于分组,match.groups() 方法可以获取每个分组匹配到的内容。

替换文本

正则表达式还能方便地进行文本替换。

text = "旧文本,旧文本,需要替换的旧文本"
new_text = re.sub(r"旧文本", "新文本", text)
print(new_text)

re.sub 函数将字符串 text 中所有匹配 旧文本 的部分替换为 新文本。

参考

[1] https://blog.csdn.net/Jack0610/article/details/134810112
[2] https://blog.csdn.net/qq_22889431/article/details/140340565

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/74952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qwen-0.5b linux部署

参考链接 https://blog.csdn.net/imwaters/article/details/145489543 https://modelscope.cn/models/modelscope/ollama-linux 1. ollama安装 # 安装ModelScope工具包&#xff0c;用于下载和管理AI模型 pip install modelscope# 下载Ollama的Linux版本安装包 # --model 指定…

【深度学习】GAN生成对抗网络:原理、应用与发展

GAN生成对抗网络&#xff1a;原理、应用与发展 文章目录 GAN生成对抗网络&#xff1a;原理、应用与发展1. 引言2. GAN的基本原理2.1 核心思想2.2 数学表达2.3 训练过程 3. GAN的主要变体3.1 DCGAN (Deep Convolutional GAN)3.2 CGAN (Conditional GAN)3.3 CycleGAN3.4 StyleGAN…

【AI速读】CNN图像处理单元的形式化验证方法

近年来,卷积神经网络(CNN)在图像处理和计算机视觉领域取得了巨大成功,如人脸识别、姿态估计等。然而,基于CNN的图像处理单元设计复杂,验证工作面临巨大挑战。传统的仿真验证方法难以覆盖其庞大的配置空间,且耗时费力。本文将介绍一种创新的形式化验证(Formal Verificat…

【新人系列】Golang 入门(八):defer 详解 - 上

✍ 个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4dd; 专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12898955.html &#x1f4e3; 专栏定位&#xff1a;为 0 基础刚入门 Golang 的小伙伴提供详细的讲解&#xff0c;也欢迎大佬们…

鸿蒙开发:了解Canvas绘制

前言 本文基于Api13 系统的组件无法满足我们的需求&#xff0c;这种情况下就不得不自己自定义组件&#xff0c;除了自定义组合组件&#xff0c;拓展组件&#xff0c;还有一种方式&#xff0c;那就是完全的自绘制组件&#xff0c;这种情况&#xff0c;常见的场景有&#xff0c;比…

【Linux笔记】进程间通信——命名管道

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;Linux &#x1f339;往期回顾&#x1f339;&#xff1a;【Linux笔记】进程间通信——匿名管道||进程池 &#x1f516;流水不争&#xff0c;争的是滔滔不 一、命名管道…

Spring项目中使用EasyExcel实现Excel 多 Sheet 导入导出功能(完整版)

Excel 多 Sheet 导入导出功能完整实现指南 一、环境依赖 1. Maven 依赖 <!-- EasyExcel --> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.2</version> </dependency>…

全流程剖析需求开发:打造极致贴合用户的产品

全流程剖析需求开发&#xff1a;打造极致贴合用户的产品 一、需求获取&#xff08;一&#xff09;与用户沟通1.面谈2.问卷调查3.会议讨论 &#xff08;二&#xff09;观察用户工作&#xff08;三&#xff09;收集现有文档 二、需求分析&#xff08;一&#xff09;提炼关键需求&…

SQL语句及其应用(中)(DQL语句之单表查询)

SQL语句的定义: 概述: 全称叫 Structured Query Language, 结构化查询语言, 主要是实现 用户(程序员) 和 数据库软件(例如: MySQL, Oracle)之间交互用的. 分类: DDL: 数据定义语言, 主要是操作 数据库, 数据表, 字段, 进行: 增删改查(CURD) 涉及到的关键字: create, drop, …

5000元组装一台本地运行中、小模型主机,参考配置 (运行DeepSeek、Qwen)

5000元组装一台本地运行中、小模型主机&#xff0c;参考配置 &#xff08;运行DeepSeek、Qwen) 5000元中、小模型主机 DeepSeek、Qwen 各精度模型推荐启动方式 模型名称 参数量 精度 模型大小 推荐运行模式 DeepSeek R1 7b Q4 5 GB LM Studio纯GPU 14b Q4 9 GB LM…

【新手初学】SQL注入getshell

一、引入 木马介绍&#xff1a; 木马其实就是一段程序&#xff0c;这个程序运行到目标主机上时&#xff0c;主要可以对目标进行远程控制、盗取信息等功能&#xff0c;一般不会破坏目标主机&#xff0c;当然&#xff0c;这也看黑客是否想要搞破坏。 木马类型&#xff1a; 按照功…

Containerd+Kubernetes搭建k8s集群

虚拟机环境设置&#xff0c;如果不是虚拟机可以忽略不看 1、安装配置containerd 1.1 添加 Kubernetes 官方仓库 安装cri-tools的时候需要用到 cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kub…

应用待机分组管控是啥

1. 应用待机群组是啥&#xff1f; Android 9 引入了一个新功能&#xff0c;叫应用待机群组。简单来说&#xff0c;就是根据你最近使用应用的频率和时间&#xff0c;系统会把应用分成不同的“群组”。每个群组的应用能用的系统资源不一样&#xff0c;比如后台任务、闹钟、网络请…

C/C++后端开发面经

字节跳动 客户端开发 实习 一面(50min) 自我介绍是否愿意转语言,是否只愿意搞后端选一个项目来详细谈谈HTTP和HTTPS有什么区别?谈一下HTTPS加密的具体过程&#xff1a; 非对称加密 对称加密 证书认证的方式 非对称加密是为了保证对称密钥的安全性。 对称…

【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】A题解题全流程(持续更新)

【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】A题解题全流程-思路&#xff08;持续更新&#xff09; 写在前面&#xff1a; 1、A题、C题将会持续更新&#xff0c;陆续更新发布文章 2、赛题交流咨询Q群&#xff1a;1037590285 3、全家桶依旧包含&#xff1a; 代码、…

如何让 history 记录命令执行时间?Linux/macOS 终端时间戳设置指南

引言:你真的会用 history 吗? 有没有遇到过这样的情况:你想回顾某个重要命令的执行记录,却发现 history 只列出了命令序号和内容,根本没有时间戳?这在运维排查、故障分析、甚至审计时都会带来极大的不便。 想象一下,你在服务器上误删了某个文件,但不知道具体是几点执…

Redis缓存异常场景深度解析:穿透、击穿、雪崩及终极解决方案

一、引言 在高并发系统中&#xff0c;缓存承担着流量洪峰的削峰填谷作用。然而当缓存层出现异常时&#xff0c;可能引发数据库级联崩溃&#xff0c;造成系统瘫痪。本文将深入剖析缓存穿透、缓存击穿、缓存雪崩三大典型问题&#xff0c;并提供企业级解决方案。文章包含7种防御策…

Scala 之 正则

regex 函数提取 import scala.util.matching.Regex// 输入表达式 val expression "[a#0, round(a#0, 0) AS round(a, 0)#1, abs(a#0) AS abs(a)#2, len(cast(a#0 as string)) AS len(a)#3]"// 定义一个正则表达式来提取函数名称 val functionPattern: Regex &quo…

CI/CD-Jenkins安装与应用

CI/CD-Jenkins安装与应用 Docker安装Jenkins docker-compose.yaml version: "3.8" # # 自定义网络配置 # networks:cicd:driver: bridgeservices:jenkins:# 尽量使用新版本的Jenkins, 低版本的Jenkins的有些插件使用不了# jenkins/jenkins:lts-jdk17是长期支持版…

验证Linux多进程时间片切换的程序

​​ 一、软件需求 在同时运行多个CPU密集型进程时&#xff0c;需采集以下统计信息&#xff1a; 当前运行在逻辑CPU上的进程ID每个进程的运行进度百分比 实验程序设计要求&#xff1a; 1. 命令行参数 参数说明示例值n并发进程数量3total总运行时长&#xff08;毫秒&…