Python中正则表达式的使用

下面介绍正则表达式的基础知识和使用方法。

  1. 正则表达式是什么?
    正则表达式(Regular Expression,简称regex)是一种用于匹配字符串模式的强大工具。就像是一种特殊的搜索语言。

  2. Python中使用正则表达式的基本步骤:

import re  # 首先导入re模块# 基本使用方法
pattern = r'你要匹配的模式'  # r表示原始字符串
text = "要搜索的文本"
result = re.findall(pattern, text)  # 查找所有匹配
  1. 常用的正则表达式语法:
# 基础匹配符号
. → 匹配任意单个字符(除了换行符)
* → 匹配前面的字符0次或多次
+ → 匹配前面的字符1次或多次
? → 匹配前面的字符0次或1^ → 匹配字符串的开始
$ → 匹配字符串的结束# 示例1:匹配电话号码
pattern = r'\d{11}'  # \d表示数字,{11}表示重复11次
phone = "我的电话是13812345678"
result = re.findall(pattern, phone)
print(result)  # ['13812345678']# 示例2:匹配邮箱
pattern = r'\w+@\w+\.\w+'  # \w表示字母数字下划线
email = "联系我:test@example.com"
result = re.findall(pattern, email)
print(result)  # ['test@example.com']
  1. 分组和引用(这就是我们AABB模式中用到的):
# ()表示分组,\1表示引用第一个分组
# 示例:匹配重复的字符
pattern = r'(.)(\1)'  # 匹配连续重复的任意字符
text = "书书信信"
result = re.findall(pattern, text)
print(result)  # [('书', '书'), ('信', '信')]# AABB模式的解释
pattern = r'(.)(\1)(.)(\3)'
# (.) 捕获第一个字符,作为第一个分组
# (\1) 引用第一个分组的内容(必须相同)
# (.) 捕获第三个字符,作为第三个分组
# (\3) 引用第三个分组的内容(必须相同)
  1. 常用的正则表达式方法:
import retext = "Python编程很有趣"# 查找所有匹配
re.findall(pattern, text)  # 返回所有匹配的列表# 查找第一个匹配
re.search(pattern, text)   # 返回第一个匹配的对象# 替换匹配的文本
re.sub(pattern, replacement, text)  # 返回替换后的字符串# 分割字符串
re.split(pattern, text)    # 返回分割后的列表
  1. 实用小例子:
# 例1:提取所有数字
text = "我今年25岁,电话是13812345678"
numbers = re.findall(r'\d+', text)
print(numbers)  # ['25', '13812345678']# 例2:匹配中文字符
text = "Hello你好World世界"
chinese = re.findall(r'[\u4e00-\u9fa5]+', text)
print(chinese)  # ['你好', '世界']# 例3:验证简单的邮箱格式
def is_valid_email(email):pattern = r'^[\w\.-]+@[\w\.-]+\.\w+$'return bool(re.match(pattern, email))print(is_valid_email("test@example.com"))  # True
print(is_valid_email("invalid.email"))     # False

让我们回到AABB模式的例子:

# AABB模式的详细解释
text = "蒙蒙胧胧的天空,匆匆忙忙地走了"
pattern = r'(.)(\1)(.)(\3)'# 分解说明
# (.) 第一个字符(比如'蒙')
# (\1) 重复第一个字符(又一个'蒙')
# (.) 第三个字符(比如'胧')
# (\3) 重复第三个字符(又一个'胧')matches = re.findall(pattern, text)
for match in matches:print(''.join(match))  # 输出:蒙蒙胧胧 匆匆忙忙

这些是正则表达式的基础用法。


正则表达式中常用字符与作用的对照

1. 特殊字符类:

\d → 匹配任意数字 (等同于[0-9])
\D → 匹配任意非数字 (等同于[^0-9])
\w → 匹配字母、数字、下划线 (等同于[a-zA-Z0-9_])
\W → 匹配非字母、数字、下划线 (等同于[^a-zA-Z0-9_])
\s → 匹配任意空白字符(空格、制表符、换行符等)
\S → 匹配任意非空白字符

2. 数量限定符:

* → 匹配前面的字符 0次或多次 (等同于{0,})
+ → 匹配前面的字符 1次或多次 (等同于{1,})
? → 匹配前面的字符 0次或1次 (等同于{0,1})
{n} → 精确匹配 n 次
{n,} → 匹配 n 次或更多次
{n,m} → 匹配 n 到 m 次

3. 边界匹配:

^ → 匹配字符串开头
$ → 匹配字符串结尾
\b → 匹配单词边界
\B → 匹配非单词边界

4. 常用特殊字符:

. → 匹配除换行符外的任意字符
\ → 转义字符
| → 或运算符(选择)
() → 分组
[] → 字符类,匹配其中的任意一个字符
[^] → 否定字符类,匹配除其中字符外的任意字符

5. 实例说明:

# 手机号码匹配
pattern = r'1\d{10}'  # 1开头后跟10个数字# 邮箱匹配
pattern = r'\w+@\w+\.\w+'  # 若干字母数字_@若干字母数字_.若干字母数字_# 中文匹配
pattern = r'[\u4e00-\u9fa5]'  # 匹配一个中文字符# 提取网址
pattern = r'https?://\S+'  # http或https开头,后跟://和非空白字符# 匹配日期格式
pattern = r'\d{4}-\d{2}-\d{2}'  # 类似2024-03-21的格式

6. 实用组合示例:

import re# 示例1:提取文本中的所有数字
text = "我的电话是13912345678,邮编是100081"
numbers = re.findall(r'\d+', text)
print(numbers)  # ['13912345678', '100081']# 示例2:匹配单词
text = "Hello_world Python123 测试"
words = re.findall(r'\w+', text)
print(words)  # ['Hello_world', 'Python123']# 示例3:分割字符串
text = "姓名:张三;年龄:25;职业:程序员"
info = re.split(r'[;:]', text)
print(info)  # ['姓名', '张三', '年龄', '25', '职业', '程序员']

7. 常见用途表:

用途模式说明
电话号码\d{11}11位数字
简单邮箱\w+@\w+\.\w+用户名@域名.顶级域名
日期\d{4}-\d{2}-\d{2}年-月-日格式
中文字符[\u4e00-\u9fa5]匹配单个中文
网址https?://\S+http或https开头的网址
邮政编码\d{6}6位数字

记忆技巧:

  1. \d (digit): 想象成"数字"的首字母
  2. \w (word): 想象成"单词"的首字母
  3. \s (space): 想象成"空格"的首字母
  4. 大写字母(如\D, \W, \S)表示对应小写的反义

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

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

相关文章

基于vue框架的的高校设备信息管理系统的设计与实现tx6d7(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:设备管理员,设备维护员,设备类别,设备,设备入库,设备分发,设备调拨,定期维护,维护任务,设备运行记录 开题报告内容 基于Vue框架的高校设备信息管理系统的设计与实现开题报告 一、项目背景及意义 随着高校教育事业的蓬勃发展&#xff…

VuePress的基本常识

今天大概了解了一下Vuepress,感觉很棒,看着极其简单,自己也想做一个,后续我大概率也会做一个用Vuepress为基础做的博客网站,很酷~ 哈哈哈,下面是我今天学习Vuepress的一些内容,简单分享下&#…

基础巩固:

发布订阅模式的实现:(基于观察者模式实现) 发布:(观察者)发布者向被观察类中注册感兴趣的事件,以map为结构(key值存储感兴趣的事件,value为该事件的感兴趣对象&#xff…

线性代数学习

1.标量由只有一个元素的张量表示 import torchx torch.tensor([3,0]) y torch.tensor([2,0])x y, x * y, x / y, x**y 2.可以将向量视为标量值组成的列表 x torch.arange(4) x 3.通过张量的索引访问任一元素 x[3] 4.访问张量长度 len(x) 5.只有一个轴的张量&#xff0c…

gin入门教程(10):实现jwt认证

使用 github.com/golang-jwt/jwt 实现 JWT(JSON Web Token)可以有效地进行用户身份验证,这个功能往往在接口前后端分离的应用中经常用到。以下是一个基本的示例,演示如何在 Gin 框架中实现 JWT 认证。 目录结构 /hello-gin │ ├── cmd/ …

[LeetCode] 50. Pow(x, n)

题目描述: 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。 示例 1: 输入:x 2.00000, n 10 输出:1024.00000示例 2: 输入:x 2.10000, n 3 输出…

Could not retrieve mirrorlist http://mirrorlist.centos.org错误解决方法

文章目录 背景解决方法 背景 今天在一台新服务器上安装nginx,在这个过程中需要安装相关依赖,在使用yum install命令时,发生了以下报错内容: Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7&archx8…

负载均衡详解:背景、实现技术、作用范围与常用算法

负载均衡(Load Balancing)是一种通过将请求分配到多个服务器上,从而优化资源使用、提高响应速度并增强系统可靠性的一种技术手段。它是现代分布式系统和互联网应用中不可或缺的一部分。在本篇文章中,我们将深入探讨负载均衡的方方…

【永中软件-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

第二十九篇:TCP的报文格式,TCP系列三

TCP是协议,是协议就有协议格式。 1.源端口和目的端口 TCP源端口(Source Port):源计算机上的应用程序的端口号,占 16 位。 TCP目的端口(Destination Port):目标计算机的应用程序端口…

Vue3+Vite实现Excel表格去重

Vue3Vite实现Excel表格去重 一、需求 Excel表格列中存在重复的数据,现想通过插件实现去重功能,具体需求为: 选择要处理的Excel表格,支持.xlsx和.xls格式选择要处理的表格列对表格进行去重处理,去重的数据保留第一个数…

政安晨【零基础玩转各类开源AI项目】基于本地Ubuntu (Linux ) 系统应用Gradio-Lite:无服务器 Gradio 完全在浏览器中运行

目录 简介 什么是@gradio/lite? 入门 1.导入 JS 和 CSS 2. 创建标签 3. 在标签内编写你的 Gradio 应用程序 更多示例:添加其他文件和要求 多个文件 其他要求 SharedWorker 模式 代码和演示playground 1.无服务器部署 2.低延迟 3. 隐私和安全 限制 尝试一下!…

基于Python+SQL Server2008实现(GUI)快递管理系统

快递业务管理系统的设计与实现 摘要: 着网络新零售的到来,传统物流在网购的洗礼下迅速蜕变,在这场以互联网为基础的时代变革中,哪家企业能率先转变其工作模式就能最先分得一杯羹,物流管理也不例外。传统的物流管理模式效率低下&a…

webView 支持全屏播放

webView 支持全屏播放 直接上代码 public class CustomFullScreenWebViewClient extends WebChromeClient {WebView webView;Context context;/*** 视频全屏参数*/protected static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS new FrameLayout.LayoutParams(ViewG…

【分布式技术】中间件-zookeeper安装配置

文章目录 安装部署1. 安装ZooKeeper2. 配置ZooKeeper3. 启动ZooKeeper服务器4. 使用ZooKeeper命令行客户端5. 使用ZooKeeper的四个基本操作6. ZooKeeper集群模式7. 安全和权限8. 监控和日志 相关文献 安装部署 在Linux环境中操作ZooKeeper通常涉及以下几个方面: 1…

同城分类信息网站源码系统 PHP+MySQL组合开发 带完整的安装代码包以及搭建部署教程

系统概述 该系统采用PHP作为后端开发语言,MySQL作为数据库管理系统。PHP是一种广泛使用的开源脚本语言,特别适合于Web开发,具有跨平台、易于学习、性能稳定等优点。MySQL则是一款轻量级的关系型数据库管理系统,具有体积小、速度快…

DHorse v1.6.0 发布,基于 k8s 的发布平台

版本说明 新增特性 支持Codeup(阿里云云效)代码仓库;支持环境的自动部署; 优化特性 管理员角色部署环境部需要审批;优化页面展示; 升级指南 升级指南 DHorse介绍 DHorse是一个轻量级、简单易用的云…

微服务网关Zuul

一、Zuul简介 Zuul是Netflix开源的微服务网关,包含对请求的路由和过滤两个主要功能。 1)路由功能:负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础。 2)过滤功能:负责对请求的过程…

车型TCU\EMS刷写详细分析

概述车型TCU(Transmission Control Unit,自动变速器控制单元)和EMS(Engine Management System,发动机管理系统)刷写的关键信息。 一、TCU刷写分析 1. TCU概述 TCU是汽车自动变速器的核心控制单元&#x…

总结性标题:高效导入文本数据,探索 MySQL 与 Java 的最佳实践

全文目录: 开篇语📝 前言🏷️ 摘要📚 简介🔍 概述🚀 核心源码解读📖 核心逻辑 🛠️ 案例分析🌍 应用场景演示👍 优缺点分析优点缺点 🔧 类代码方法…