当前位置: 首页 > 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…...

从原始数据到三维点云:TI毫米波雷达信号处理全链路拆解

1. 毫米波雷达基础与TI设备特性 毫米波雷达作为现代感知技术的核心组件,其工作原理类似于蝙蝠的生物声呐系统,只不过使用的是电磁波而非声波。TI(德州仪器)的AWR系列雷达设备因其高性价比和完整开发生态,成为工业界的热…...

Obsidian模板库实战指南:从零构建高效知识管理系统

Obsidian模板库实战指南:从零构建高效知识管理系统 【免费下载链接】OB_Template OB_Templates is a Obsidian reference for note templates focused on new users of the application using only core plugins. 项目地址: https://gitcode.com/gh_mirrors/ob/OB…...

避坑指南:MTK DRM屏兼容中,那些容易让你“点不亮”的硬件与配置细节(附TP复位脚案例)

MTK DRM屏兼容开发实战:从硬件引脚到驱动配置的深度避坑指南 在MTK平台的多屏兼容开发中,工程师们常常会遇到屏幕"点不亮"的棘手问题。这类问题往往源于硬件连接、引脚配置或驱动编译选项中的细微疏忽。本文将结合真实案例,深入剖…...

从LTE到5G-Advanced:载波聚合(CA)技术演进全解析与网络工程师调试指南

从LTE到5G-Advanced:载波聚合技术深度演进与实战调试手册 当你在凌晨三点的基站机房盯着屏幕上跳动的KPI指标,突然发现某个5G小区下行速率始终无法突破800Mbps——这很可能是一个典型的载波聚合配置问题。作为网络优化工程师,我们每天都在与这…...

如何用tiny11builder打造轻量Windows 11系统:绕过硬件限制的完整指南

如何用tiny11builder打造轻量Windows 11系统:绕过硬件限制的完整指南 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 老旧电脑无法流畅运行Windows 11…...

如何高效捕获网页媒体资源:猫抓浏览器插件智能解决方案

如何高效捕获网页媒体资源:猫抓浏览器插件智能解决方案 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字内容爆炸的时代,网页中的视频、音频和图片资源往往难以直接保存&…...

Spark 4.0 新特性Python Data Source API 快速上手

1. 什么是 Python Data Source API Python Data Source API 是 Spark 4.0 引入的新能力,它允许开发者在 Python 中直接实现自定义数据源和数据写出逻辑。换句话说,你可以像实现一个插件一样,为 Spark 增加新的读取来源和写出目标,…...

基于NativeAOT的 OpenClaw.NET 深度刨析

:自主智能体架构的演进与原生运行时的瓶颈大型语言模型(LLM)的快速成熟引发了软件工程领域的底层范式转移。行业焦点已从基于静态提示词(Prompt)的问答系统,全面转向具备自主规划、工具调用与长程逻辑推理能…...

掌握Calibre电子书管理:从格式转换到高级编辑的完整指南

掌握Calibre电子书管理:从格式转换到高级编辑的完整指南 【免费下载链接】calibre The official source code repository for the calibre ebook manager 项目地址: https://gitcode.com/GitHub_Trending/ca/calibre Calibre是一款功能强大的开源电子书管理器…...

Qwen2-VL-2B-Instruct在Qt桌面应用中的集成:开发跨平台图像分析工具

Qwen2-VL-2B-Instruct在Qt桌面应用中的集成:开发跨平台图像分析工具 1. 引言 如果你是做桌面应用开发的,特别是用C和Qt的,最近可能也注意到了AI模型带来的新机会。很多开发者都在想,怎么把这些强大的AI能力,比如看图…...