当前位置: 首页 > news >正文

正则表达式篇

文章目录

  • 1. 导入re模块
  • 2. 正则表达式的基本模式
  • 3. re模块的主要函数和方法
  • 4. 示例

正则表达式(Regular Expression,常简写为regex或regexp)是一种强大的文本处理工具,它使用一种特殊的字符序列来帮助用户检查一个字符串是否与某种模式匹配。Python内置的re模块提供了完整的正则表达式功能。

以下是一个关于Python中正则表达式的详细教程:

1. 导入re模块

首先,你需要导入Python的re模块来使用正则表达式。


import re

2. 正则表达式的基本模式

  • 字符匹配:
    • .:匹配任意字符(除了换行符)
    • [abc]:匹配方括号中的任意一个字符
    • [^abc]:匹配不在方括号中的任意一个字符
    • [a-z]:匹配任意小写字母
    • [A-Z]:匹配任意大写字母
    • [a-zA-Z]:匹配任意字母
    • [0-9]:匹配任意数字
    • \d:匹配任意数字,等同于[0-9]
    • \D:匹配非数字,等同于[^0-9]
    • \w:匹配任意字母、数字或下划线,等同于[a-zA-Z0-9_]
    • \W:匹配非字母、数字或下划线,等同于[^a-zA-Z0-9_]
    • \s:匹配任意空白字符,包括空格、制表符、换页符等
    • \S:匹配非空白字符
  • 数量词:
    • *:匹配前面的子表达式零次或多次
    • +:匹配前面的子表达式一次或多次
    • ?:匹配前面的子表达式零次或一次
    • {n}:匹配前面的子表达式恰好n次
    • {n,}:匹配前面的子表达式至少n次
    • {n,m}:匹配前面的子表达式至少n次,但不超过m次
  • 边界匹配:
    • ^:匹配字符串的开始
    • $:匹配字符串的结束
    • \b:匹配一个单词边界
    • \B:匹配非单词边界
  • 选择、分组和引用:
    • |:或操作,匹配|左右任意一个表达式
    • ():捕获括号,对正则表达式进行分组,并捕获匹配的文本
    • (?:…):非捕获括号,只进行分组,不捕获匹配的文本
    • \n:引用前面第n个捕获括号中匹配的文本(n为正整数)
      转义字符:
    • \:对特殊字符进行转义,使其失去特殊意义

3. re模块的主要函数和方法

  • re.match(pattern, string, flags=0):从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None。
  • re.search(pattern, string, flags=0):扫描整个字符串并返回第一个成功的匹配。
  • re.findall(pattern, string, flags=0):在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
  • re.finditer(pattern, string, flags=0):和findall类似,但返回的是一个迭代器。
  • re.split(pattern, string, maxsplit=0, flags=0):按照能够匹配的子串将字符串分割后返回列表。
  • re.sub(pattern, repl, string, count=0, flags=0):在字符串中查找匹配正则表达式的部分,并将其替换为另一个字符串。
  • re.compile(pattern, flags=0):将正则表达式编译成一个Pattern对象,可以供match()和search()这两个函数使用。

4. 示例

以下是一些使用Python正则表达式的示例:

  1. re.match()

import re  # 匹配字符串起始位置的模式  
pattern = r'Hello'  
string = 'Hello, world!'  
match = re.match(pattern, string)  
if match:  print('Found match:', match.group())  # 输出: Found match: Hello  
else:  print('No match found.')
  1. re.search()

import re  # 在整个字符串中搜索模式  
pattern = r'\d+'  # 匹配一个或多个数字  
string = 'The price is 123 dollars.'  
search = re.search(pattern, string)  
if search:  print('Found match:', search.group())  # 输出: Found match: 123  
else:  print('No match found.')
  1. re.findall()

import re  # 找到所有匹配模式的子串  
pattern = r'\b\w+\b'  # 匹配单词边界之间的单词  
string = 'Hello world, this is a Python tutorial.'  
matches = re.findall(pattern, string)  print('Matches:', matches)  # 输出: Matches: ['Hello', 'world', 'this', 'is', 'a', 'Python', 'tutorial']
  1. re.finditer()

import re  # 找到所有匹配模式的子串,并返回迭代器  
pattern = r'\d+'  
string = 'The numbers are 123 and 456.'  
matches = re.finditer(pattern, string)  
for match in matches:  print('Found match:', match.group())  # 输出: Found match: 123 和 Found match: 456
  1. re.split()

import re  # 使用模式分割字符串  
pattern = r'\s+'  # 匹配一个或多个空白字符  
string = 'This is a test string.'  
split_string = re.split(pattern, string)  print('Split string:', split_string)  # 输出: Split string: ['This', 'is', 'a', 'test', 'string.']
  1. re.sub()

import re  # 替换字符串中匹配模式的子串  
pattern = r'\d+'  
repl = 'NUMBER'  
string = 'The price is 123 dollars and the code is 456.'  
new_string = re.sub(pattern, repl, string)  print('New string:', new_string)  # 输出: New string: The price is NUMBER dollars and the code is NUMBER.
  1. re.compile()

import re  # 编译正则表达式为Pattern对象,之后可以多次使用  
pattern = re.compile(r'\b\w+\b')  
string = 'Hello world, this is a Python tutorial.'  
matches = pattern.findall(string)  print('Matches:', matches)  # 输出: Matches: ['Hello', 'world', 'this', 'is', 'a', 'Python', 'tutorial']

这些例子涵盖了re模块中常用的函数和方法,并展示了如何使用它们来匹配、搜索、查找所有匹配项、迭代匹配项、分割字符串以及替换字符串中的模式。你可以根据实际需要调整正则表达式和字符串来适应不同的场景。

相关文章:

正则表达式篇

文章目录 1. 导入re模块2. 正则表达式的基本模式3. re模块的主要函数和方法4. 示例 正则表达式(Regular Expression,常简写为regex或regexp)是一种强大的文本处理工具,它使用一种特殊的字符序列来帮助用户检查一个字符串是否与某种…...

CAST(columnA AS VARCHAR(255)) AS fieldA报错的问题

列类型转换,不能使用VARCHAR,是能使用CHAR 应该改为: CAST(columnA AS CHAR(255)) AS fieldA报错的问题...

github加速神器!解决github巨慢的问题,并且能够加速下载!另外推荐GitKraken -- 超好用的 Git 可视化工具

FastGithub github加速神器,解决github打不开、用户头像无法加载、releases无法上传下载、git-clone、git-pull、git-push失败等问题。 下载地址: 清华云盘 2 部署方式 2.1 windows-x64桌面 双击运行FastGithub.UI.exe 2.2 windows-x64服务 fastgi…...

Stable Diffusion XL之使用Stable Diffusion XL训练自己的AI绘画模型

文章目录 一 SDXL训练基本步骤二 从0到1上手使用Stable Diffusion XL训练自己的AI绘画模型2.1 配置训练环境与训练文件2.2 SDXL训练数据集制作(1) 数据筛选与清洗(2) 使用BLIP自动标注caption(3) 使用Waifu Diffusion 1.4自动标注tag(4) 补充标注特殊tag(5) 训练数据预处理(标注…...

软件杯 深度学习 机器视觉 人脸识别系统 - opencv python

文章目录 0 前言1 机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别 2 深度学习-人脸识别过程人脸检测人脸识别Metric Larning 3 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习 机器视觉 人脸识别系统 该项目…...

IDEA | 资源文件中文乱码问题解决

问题 IDEA打开资源文件,显示乱码问题。 解决方案 1、电脑是mac,点击IDEA->【Preferences】->【Editor】->【File Encodings】 2、选择【Properties Files】中的UTF-8,并勾选Transparent native-to-ascii conversion。 3、最后点击…...

Linux系统使用Docker部署Portainer结合内网穿透实现远程管理容器和镜像

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

【Git篇】复习git

文章目录 🍔什么是git⭐git和svn的区别 🍔搭建本地仓库🍔克隆远程仓库🛸git常用命令 🍔什么是git Git是一种分布式版本控制系统,它可以追踪文件的变化、协调多人在同一个项目上的工作、恢复文件的旧版本等…...

[LitCTF 2023]程序和人有一个能跑就行了

新知识 seh 表面上的逻辑蛮简单的 int __cdecl main(int argc, const char **argv, const char **envp) {_DWORD *v3; // eax_DWORD *v5; // eaxchar *v6; // eaxint v7; // [esp0h] [ebp-2ACh] BYREFint v8; // [esp14h] [ebp-298h]int *v9; // [esp18h] [ebp-294h]int v10;…...

如何在群晖NAS搭建bitwarden密码管理软件并实现无公网IP远程访问

前言 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊如何在群晖NAS搭建bitwarden密码管理软件并实现无公网IP远程访问,希望大家能觉得实用! 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖&am…...

perl:获取同花顺数据--业绩快报,业绩公告

perldoc LWP::UserAgent 如果没有安装,则安装模块,运行 cpanm LWP::UserAgent 。 编写 get_yjkb_10jqka.pl 如下 #!/usr/bin/perl # perl 获取同花顺数据--业绩快报 use LWP::UserAgent; use Encode qw(decode encode); use POSIX; use Data::Dump…...

FPGA选型

开发FPGA的第一步,就是选择一片符合设计需求的芯片。 专用资源 选片第一个关注的应该是FPGA器件的专用资源。例如是否需要高速接口,如果需要的话,需要多少个通道,各个通道需要的最高收发速度是多少。同样,如果需要实…...

centos系统的root密码忘记或失效的解决办法(超详细)

文章目录 1、概述2、现象描述3、解决步骤3.1 进入单机维护模式3.2 修改启动参数3.3 在维护模式下修改密码3.4 重启 4、总结 1、概述 在Linux系统中,root用户是最高权限的用户,可以执行任何命令和操作。但是,如果我们忘记了root用户的密码&…...

【Android 源码】Android源码下载指南

文章目录 前言安装Repo初始化Repo选择分支没有梯子替换为清华源 有梯子 下载源码下载开始参考 前言 这是关于Android源码下载的过程记录。 环境:Windows上通过VMware安装的Ubuntu系统 安装Repo 创建Repo文件目录 mkdir ~/bin PATH~/bin:$PATH下载Repo工具&#…...

MySQL数据库高级语句

文章目录 MySQL高级语句older by 排序区间判断查询或与且(or 与and)嵌套查询(多条件)查询不重复记录distinctcount 计数限制结果条目limit别名as常用通配符嵌套查询(子查询)同表不同表嵌套查询还能用于删除…...

软件测试【理论基础】

软件测试的IEEE定义:使用人工或自动的手段来运行或测量软件系统的过程,目的是检验软件系统是否满足规定的需求,并找出与预期结果之间的差异。 软件测试的发展趋势: ① 测试工作将进一步前移。软件测试不仅仅是单元测试、集成测试、系统测试…...

蓝桥杯每日一题(floyd算法)

4074 铁路与公路 如果两个城市之间有铁路t11,公路就会t2>1,没铁路的时候t1>1,公路t21。也就是公路铁路永远都不会相等。我们只需要计算通过公路和铁路从1到n最大的那个即可。 floyd是直接在数组上更新距离。不需要新建dis数组。另外一定要记得把邻接矩阵初始…...

文心一言 VS 讯飞星火 VS chatgpt (224)-- 算法导论16.3 6题

六、假定我们有字母表 C{0,1,…,n-1} 上的一个最优前缀码,我们希望用最少的二进制位传输此编码。说明如何仅用 2n-1n⌈lgn⌉ 位表示 C 上的任意最优前缀码。(提示:通过对树的遍历,用 2n-1 位说明编码树的结…...

flutter3_douyin:基于flutter3+dart3短视频直播实例|Flutter3.x仿抖音

flutter3-dylive 跨平台仿抖音短视频直播app实战项目。 全新原创基于flutter3.19.2dart3.3.0getx等技术开发仿抖音app实战项目。实现了类似抖音整屏丝滑式上下滑动视频、左右滑动切换页面模块,直播间进场/礼物动效,聊天等模块。 运用技术 编辑器&#x…...

VR全景赋能智慧农业,打造沉浸式种植体验平台

随着人口的增长,传统农业也正在面临着不一样的挑战,加上很多人对农业的固有印象,很少有年轻人愿意下到农田里,那么该如何提高产量、降低成本以及引导年轻人深刻感受现代农业成为了急需解决的问题。 随着城市化脚步的推进&#xff…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

python/java环境配置

环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: ​onCreate()​​ ​调用时机​:Activity 首次创建时调用。​…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

Kafka入门-生产者

生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...