【Python】教你彻底了解Python中的正则表达式

​​​​在这里插入图片描述

文章目录

    • 一、正则表达式的基本概念
      • 1. 元字符
      • 2. 特殊序列
    • 二、Python中正则表达式的使用方法
      • 1. 导入`re`模块
      • 2. 匹配(match)
      • 3. 搜索(search)
      • 4. 查找所有匹配(findall)
      • 5. 替换(sub)
      • 6. 分割(split)
    • 三、常见操作与应用场景
      • 1. 验证电子邮件地址
      • 2. 提取电话号码
      • 3. 替换敏感信息
      • 4. 分割日志文件
    • 四、实际应用示例
      • 1. 网页数据抓取
      • 2. 日志文件解析
    • 结论

正则表达式(Regular Expression,简称regex)是一种强大的字符串匹配和操作工具,用于搜索、匹配和替换字符串。在Python中,re模块提供了正则表达式的支持。本文将深入探讨Python中的正则表达式,涵盖正则表达式的基本概念、常用正则表达式模式、Python中正则表达式的使用方法、常见操作与应用场景,以及一些实际应用示例。

一、正则表达式的基本概念

正则表达式是一种模式,用于描述和匹配字符串中的字符序列。通过使用特定的语法规则,可以构建复杂的模式来匹配需要的字符串。

1. 元字符

元字符是正则表达式中具有特殊意义的字符,用于构建匹配模式。常见的元字符包括:

  • .:匹配除换行符外的任意字符
  • ^:匹配字符串的开头
  • $:匹配字符串的结尾
  • *:匹配前一个字符零次或多次
  • +:匹配前一个字符一次或多次
  • ?:匹配前一个字符零次或一次
  • {n}:匹配前一个字符恰好n次
  • {n,}:匹配前一个字符至少n次
  • {n,m}:匹配前一个字符n到m次
  • []:匹配方括号中的任意一个字符
  • |:匹配左右任意一个表达式
  • ():分组

2. 特殊序列

特殊序列是正则表达式中的一些特殊字符,用于匹配特定的字符类型。常见的特殊序列包括:

  • \d:匹配任何十进制数字,相当于[0-9]
  • \D:匹配任何非数字字符,相当于[^0-9]
  • \w:匹配任何字母数字字符,相当于[a-zA-Z0-9_]
  • \W:匹配任何非字母数字字符,相当于[^a-zA-Z0-9_]
  • \s:匹配任何空白字符,相当于[\t\n\r\f\v]
  • \S:匹配任何非空白字符,相当于[^\t\n\r\f\v]

二、Python中正则表达式的使用方法

Python的re模块提供了丰富的正则表达式功能,包括匹配、搜索、替换等操作。

1. 导入re模块

使用正则表达式前需要导入re模块:

import re

2. 匹配(match)

re.match函数用于从字符串的开头匹配正则表达式。如果匹配成功,返回一个匹配对象;否则,返回None

import re

pattern = r'\d+'
text = '123abc'

match = re.match(pattern, text)
if match:
    print("Match found:", match.group())
else:
    print("No match found")

3. 搜索(search)

re.search函数用于在整个字符串中搜索匹配正则表达式的第一个位置。如果匹配成功,返回一个匹配对象;否则,返回None

import re

pattern = r'\d+'
text = 'abc123def'

search = re.search(pattern, text)
if search:
    print("Match found:", search.group())
else:
    print("No match found")

4. 查找所有匹配(findall)

re.findall函数用于查找字符串中所有匹配正则表达式的子串,返回一个列表。

import re

pattern = r'\d+'
text = 'abc123def456ghi789'

matches = re.findall(pattern, text)
print("All matches:", matches)

5. 替换(sub)

re.sub函数用于替换字符串中所有匹配正则表达式的子串。

import re

pattern = r'\d+'
text = 'abc123def456ghi789'

result = re.sub(pattern, '#', text)
print("Replaced text:", result)

6. 分割(split)

re.split函数用于根据匹配正则表达式的子串来分割字符串。

import re

pattern = r'\d+'
text = 'abc123def456ghi789'

result = re.split(pattern, text)
print("Splitted text:", result)

三、常见操作与应用场景

正则表达式在文本处理和数据清洗中有广泛的应用,以下是一些常见的操作与应用场景。

1. 验证电子邮件地址

使用正则表达式验证电子邮件地址的格式。

import re

pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
email = 'example@example.com'

if re.match(pattern, email):
    print("Valid email address")
else:
    print("Invalid email address")

2. 提取电话号码

使用正则表达式从文本中提取电话号码。

import re

pattern = r'\b\d{3}[-.]?\d{3}[-.]?\d{4}\b'
text = 'Contact us at 123-456-7890 or 987.654.3210'

matches = re.findall(pattern, text)
print("Phone numbers:", matches)

3. 替换敏感信息

使用正则表达式替换文本中的敏感信息。

import re

pattern = r'\b\d{3}[-.]?\d{2}[-.]?\d{4}\b'
text = 'My social security number is 123-45-6789'

result = re.sub(pattern, '###-##-####', text)
print("Anonymized text:", result)

4. 分割日志文件

使用正则表达式分割日志文件中的条目。

import re

pattern = r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'
log = '2021-01-01 12:00:00 Log entry 1\n2021-01-01 12:01:00 Log entry 2\n2021-01-01 12:02:00 Log entry 3'

entries = re.split(pattern, log)
entries = [entry.strip() for entry in entries if entry]
print("Log entries:", entries)

四、实际应用示例

以下是两个实际应用示例,演示如何使用Python中的正则表达式处理文本数据。

1. 网页数据抓取

以下示例展示了如何使用正则表达式从网页源代码中提取所有链接。

import re

html = """
<html>
    <head><title>Example Page</title></head>
    <body>
        <a href="http://example.com">Link 1</a>
        <a href="https://example.org">Link 2</a>
        <a href="http://example.net">Link 3</a>
    </body>
</html>
"""

pattern = r'href="(http[s]?://[^"]+)"'
links = re.findall(pattern, html)
print("Links:", links)

2. 日志文件解析

以下示例展示了如何使用正则表达式解析日志文件并提取关键信息。

import re

log = """
2021-01-01 12:00:00 INFO User login: user1
2021-01-01 12:01:00 ERROR Failed login attempt: user2
2021-01-01 12:02:00 INFO User logout: user1
"""

pattern = r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (INFO|ERROR) (.+)'
matches = re.findall(pattern, log)
for match in matches:
    timestamp, level, message = match
    print(f"Timestamp: {timestamp}, Level: {level}, Message: {message}")

结论

正则表达式是处理文本数据的强大工具,可以用于搜索、匹配、替换和分割字符串。在Python中,re模块提供了丰富的正则表达式功能,使得文本处理变得更加简单和高效。在本文中,我们详细探讨了正则表达式的基本概念、常用正则表达式模式、Python中正则表达式的使用方法、常见操作与应用场景,以及一些实际应用示例。希望这篇文章能帮助你更好地理解和应用Python中的正则表达式,从而在实际项目中实现更高效的解决方案。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新零售智能售卖教学实训沙盘内容介绍

新零售智能售卖教学实训沙盘是服务数据分析的教学工具。通过该沙盘&#xff0c;能够让学生了解数据分析在新零售行业智能售卖业务场景的应用流程。使用新零售智能售卖教学实训沙盘进行教学&#xff0c;一方面能够让老师的教学内容更加贴近实际应用&#xff0c;将教学场景具象化…

达摩院重大“遗产”!fluxonium量子比特初始化300纳秒且保真度超过99%

通用量子计算机开发的主要挑战之一是制备量子比特。十多年来&#xff0c;研究人员在构建量子计算机的过程中主要使用了transmon量子比特&#xff0c;这也是迄今为止商业上最成功的超导量子比特。 但与业界多数选择transmon量子比特不同&#xff0c;&#xff08;前&#xff09;…

C语言:详解gcc驱动程序完成编译、汇编、链接的过程

相关阅读 C语言https://blog.csdn.net/weixin_45791458/category_12423166.html?spm1001.2014.3001.5482 gcc是一个命令&#xff0c;严格意义上说&#xff0c;它只是一个驱动程序&#xff0c;而不是一个编译器。gcc负责调用GNU工具链中的预处理器、编译器、汇编器、链接器等工…

X-Caps

用于对视觉属性进行编码的胶囊 补充信息 数据集太大&#xff0c;不建议复现

机器学习笔记 - 本地windows 11 + PyCharm运行stable diffusion流程简述

一、环境说明 硬件:本地电脑windows11、32.0 GB内存、2060的6G的卡。 软件:本地有一个python环境,主要是torch 2.2.2+cu118 二、准备工作 1、下载模型 https://huggingface.co/CompVishttps://huggingface.co/CompVis 进入上面的网址,我这里下载的是这个里面的 …

el-input添加clearable属性 输入内容时会直接撑开

<el-inputclearablev-if"item.type number || item.type text":type"item.type":placeholder"item.placeholder":prefix-icon"item.icon || "v-model.trim"searchform[item.prop]"></el-input>解决方案 添加c…

LLM的基础模型6:注意力机制

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提…

DVWA-XSS(Stored)

Low 观察后端代码&#xff0c;对输入进行了一些过滤和转义。trim(string,charlist) 函数用于移除字符串两侧的空白字符或其他预定义字符&#xff0c;charlist 参数可以规定从字符串中删除哪些字符。stripslashes() 函数用于删除反斜杠。mysqli_real_escape_string() 函数用于对…

问题:合规电动自行车国家标准是() #学习方法#媒体#经验分享

问题&#xff1a;合规电动自行车国家标准是&#xff08;&#xff09; A&#xff0e;必须有脚踏能实现人力骑行 B&#xff0e;最高设计车速不大于25km/h C&#xff0e;整车质量不大于55kg D&#xff0e;电机输出功率不大于240w 参考答案如图所示

Linux——PXE整体流程

1.自己安装一个CentOS 8的服务器 1&#xff09;手动安装 虚拟硬件配置&#xff1a;2核CPU&#xff0c;4G内存&#xff0c;100G硬盘 2个网卡&#xff08;一个通外网&#xff0c;一个内部使用&#xff09; 软件安装&#xff1a;Server GUI 磁盘分区&#xff1a;使用逻辑卷&#…

Prometheus+Altermanager实现钉钉告警

PrometheusAltermanager实现钉钉告警 Prometheus和Altermanager的安装这里就不赘述了&#xff0c;我之前的文章有写到 不记得的小伙伴可以去看看Prometheus和Altermanager的安装使用 直接开始上操作 下载钉钉并打开&#xff0c;先创建一个接收告警信息的钉钉群 添加一个自定…

信息系统项目管理师0144:裁剪考虑因素(9项目范围管理—9.2项目范围管理过程—9.2.2裁剪考虑因素)

点击查看专栏目录 文章目录 9.2.2 裁剪考虑因素 9.2.2 裁剪考虑因素 因为每个项目都是独特的&#xff0c;所以项目经理可能根据需要裁剪项目范围管理过程。裁剪时应考虑的因素包括&#xff1a; 知识和需求管理&#xff1a;项目经理应建立哪些指南&#xff1f;为了在未来项目中…

【外汇天眼】胜率提升秘籍:洞悉外汇市场五大参与者的角色与功能

外汇市场是全球最活跃、流动性最高的金融交易市场&#xff0c;每日交易量在6万亿到11万亿美元之间。它的日交易量是全球股票市场的27倍&#xff0c;全球期货市场的12倍&#xff0c;全球债券市场的7倍&#xff0c;超过了全球所有金融产品日交易量的总和。随着全球金融一体化的进…

zeppelin 未授权任意命令执行漏洞复现

一、命令执行复现 访问http://ip:8080&#xff0c;打开zeppelin页面&#xff0c;&#xff08;zeppelin默认监听端口在8080&#xff09; 点击Notebook->create new note创建新笔记 在创建笔记的时候选择Default Interpreter为sh&#xff0c;即可执行sh命令 如下图&#x…

以hive metastore报错举例,远程调试hadoop服务

项目场景&#xff1a; CDH集群CM切换hive元数据库报错&#xff1a; com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at…

23中设计模式之一— — — —命令模式的详细介绍

命令模式 Command Pattern讲解 概念描述模式结构主要角色模式的UIM类图模式优点模式缺点应用场景实例演示类图代码演示运行结果 概念 命令模式&#xff08;别名&#xff1a;动作&#xff0c;事务&#xff09; 命令模式是一种行为设计模式&#xff0c;将一个请求封装为一个对象…

大厂真实面试题(二)

小红书大数据面试SQL-用户商品购买收藏行为特征加工 1.题目 已知有 购买记录表t_order,包含自增id:id,用户ID:user_id,商品ID:goods_id,订单时间:order_time,商品类别:goods_type; 用户收藏记录表t_collect_log,包含自增id,用户ID:user_id,商品ID:goods_id,收藏时间 c…

【WP】猿人学15_备周则意怠_常见则不疑

https://match.yuanrenxue.cn/match/15 抓包分析 抓包分析有一个m参数&#xff0c;三个数字组成 追栈/扣代码 根据启动器顺序追栈&#xff0c;一般优先跳过 jQuery 直接能找到加密函数 每次获取的数字都不一样 window.m function() { t1 parseInt(Date.parse(new Date(…

优思学院|谈汽车零部件企业生产精益及现场管理

精益生产&#xff08;Lean Production&#xff09;和现场管理作为现代制造企业的核心管理理念&#xff0c;正在越来越多的企业中得到应用。尤其是在中国&#xff0c;许多汽车零部件企业通过精益管理和六西格玛方法&#xff0c;显著提高了生产效率&#xff0c;降低了生产成本&am…

红酒:如何选择适合的红酒储存容器

选择适合的红酒储存容器对于保持雷盛红酒的品质和风味至关重要。不同的容器具有不同的优缺点&#xff0c;因此应根据个人需求和条件进行选择。以下是一些常见的红酒储存容器的特点和适用场景&#xff1a; 玻璃瓶&#xff1a;玻璃瓶是常见的红酒储存容器。它具有良好的密封性能、…