python:正则表达式

server/2024/12/23 0:27:41/

正则表达式(Regular Expressions,简称 regex)是一种强大的文本处理工具,用于匹配字符串中的字符组合。Python 提供了 re 模块来支持正则表达式的操作。以下是一些常用的正则表达式操作和示例:

导入 re 模块

首先,你需要导入 re 模块:

 

python复制代码

import re

基本用法

1. 匹配字符串

使用 re.match() 函数从字符串的起始位置匹配正则表达式

 

python复制代码

pattern = r'\d+' # 匹配一个或多个数字
match = re.match(pattern, '123abc')
if match:
print(match.group()) # 输出: 123
2. 搜索字符串

使用 re.search() 函数在字符串中搜索正则表达式(返回第一个匹配):

 

python复制代码

pattern = r'\d+'
match = re.search(pattern, 'abc123')
if match:
print(match.group()) # 输出: 123
3. 查找所有匹配项

使用 re.findall() 函数查找字符串中所有匹配正则表达式的子串:

 

python复制代码

pattern = r'\d+'
matches = re.findall(pattern, 'abc123def456')
print(matches) # 输出: ['123', '456']
4. 替换字符串

使用 re.sub() 函数替换字符串中匹配正则表达式的部分:

 

python复制代码

pattern = r'\d+'
result = re.sub(pattern, 'number', 'abc123def456')
print(result) # 输出: abcnumberdefnumber

常用正则表达式符号

  • .:匹配除换行符以外的任意字符。
  • ^:匹配字符串的开始。
  • $:匹配字符串的结束。
  • *:匹配前面的字符零次或多次。
  • +:匹配前面的字符一次或多次。
  • ?:匹配前面的字符零次或一次。
  • {n}:匹配前面的字符恰好 n 次。
  • {n,}:匹配前面的字符至少 n 次。
  • {n,m}:匹配前面的字符至少 n 次,但不超过 m 次。
  • []:字符集,匹配括号中的任意一个字符。
  • |:逻辑或,匹配左右两边的任意一个表达式。
  • ():分组,用于提取匹配的子串。
  • \\:转义字符,用于匹配特殊字符(如 .*? 等)。

示例

匹配电子邮件地址
 

python复制代码

pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'
match = re.match(pattern, 'example@example.com')
if match:
print("Valid email address")
else:
print("Invalid email address")
匹配 URL
 

python复制代码

pattern = r'https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+'
match = re.search(pattern, 'Visit https://www.example.com for more info.')
if match:
print("Found a URL:", match.group())

编译正则表达式

为了提高效率,你可以使用 re.compile() 函数编译正则表达式,然后多次使用编译后的模式:

 

python复制代码

pattern = re.compile(r'\d+')
matches = pattern.findall('abc123def456')
print(matches) # 输出: ['123', '456']

捕获组

使用括号 () 可以捕获匹配的子串:

 

python复制代码

pattern = r'(\d+)-(\d+)-(\d+)'
match = re.match(pattern, '2023-10-05')
if match:
year, month, day = match.groups()
print(year, month, day) # 输出: 2023 10 05

命名捕获组

你可以给捕获组命名,以便更容易地访问它们:

 

python复制代码

pattern = r'(?P<year>\d+)-(?P<month>\d+)-(?P<day>\d+)'
match = re.match(pattern, '2023-10-05')
if match:
print(match.group('year'), match.group('month'), match.group('day')) # 输出: 2023 10 05

正则表达式是一个非常强大的工具,适用于各种文本处理任务。通过掌握基本的正则表达式语法和 Python 的 re 模块,你可以高效地处理和分析字符串数据。


http://www.ppmy.cn/server/152358.html

相关文章

故障诊断 | 一个小创新:特征提取+KAN分类

往期精彩内容&#xff1a; Python-凯斯西储大学&#xff08;CWRU&#xff09;轴承数据解读与分类处理 基于FFT CNN - BiGRU-Attention 时域、频域特征注意力融合的轴承故障识别模型-CSDN博客 基于FFT CNN - Transformer 时域、频域特征融合的轴承故障识别模型-CSDN博客 P…

优先队列【东北大学oj数据结构9-3】C++

优先队列 优先级队列是一种数据结构&#xff0c;其中保存了一组数据 S&#xff0c;其中每个元素都有一个键&#xff0c;并执行以下操作&#xff1a; insert(S, k)&#xff1a;将元素k插入集合S extractMax(S)&#xff1a;从S中取出S中key最大的元素并返回其值 创建一个程序&am…

Vue.js前端框架教程3:Vue setup语法糖和异步操作

文章目录 script setup基本语法使用 Composition API组件定义使用生命周期钩子模板引用使用 defineProps 和 defineEmits组合多个 <script setup> 标签 Vue异步操作1. 使用 async 和 await2. 使用 Promise3. 在 created 或 mounted 钩子中执行异步操作4. 使用 watch 或 w…

24届FPGA秋招经验分享

学员客户&#xff1a;首先自我介绍一下&#xff0c;我本科就读于一所985高校&#xff0c;专业是电子信息工程&#xff0c;硕士阶段则专注于FPGA方向的研究。虽然有着相对扎实的理论基础&#xff0c;但在秋招过程中&#xff0c;我仍然遇到了不少挑战。以下是我结合自己的亲身经历…

单元测试使用记录

什么是单元测试 简单来说就是对一个类中的方法进行测试&#xff0c;对输出的结果检查判断是否符合预期结果 但是在多年的工作中&#xff0c;从来没有哪个项目中真正系统的用到了单元测试&#xff0c;因此对它还是很陌生的&#xff0c;也就造成更加不会在项目中区使用它。 如何…

深入解析 `DataFrame.groupby` 和 `agg` 的用法及使用场景

深入解析 DataFrame.groupby 和 agg 的用法及使用场景 1. groupby 的基本用法语法&#xff1a;示例&#xff1a; 2. agg 的基本用法语法&#xff1a;示例&#xff1a; 3. first、sum、lambda 的用法3.1 first示例&#xff1a; 3.2 sum示例&#xff1a; 3.3 lambda示例&#xff…

apache的常见报错

文章目录 一、httpd -k install -n Apache输入后&#xff0c;提示拒绝访问怎么办解决方案 二、命令行输入&#xff1a;httpd -t 报错解决方案 三、httpd -k install -n Apache输入后&#xff0c;另外一种报错解决方案测试是否成功 四、路径问题引起报错解决方案 一、httpd -k i…

STM32F407寄存器点灯

背景描述&#xff1a; 最近用32开发遇到问题不得不看寄存器了&#xff0c;就回顾了一下寄存器手册的查看方式和寄存器的使用方法&#xff1b; 上一次这么细致的记录还是在刚学习STM32的时候&#xff0c;之前觉得看寄存器手册以及配置寄存器是有点难度的事情&#xff0c;现在回头…