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

《Python基础》之正则表达式--re模块

目录

简介

正则表达式语法介绍

1. 基本字符匹配

2. 字符集

3. 预定义字符集

4. 重复匹配

5. 边界匹配

6. 分组与捕获

7. 反向引用

8. 特殊字符转义

9. 常用正则表达式示例

re模块的用法

1、re.findall() 

2、re.match() 

3、re.search() 

4、re.split()

5、re.finditer()

6、re.fullmatch()

7、re.sub() 

总结


简介

正则表达式(Regular Expressions,简称 regex 或 regexp)是一种用于匹配字符串中字符组合的模式。正则表达式的语法非常强大,可以用于复杂的字符串匹配和操作。

Python 正则表达式(Regular Expressions)是通过 re 模块来实现的。正则表达式是一种强大的工具,用于在字符串中查找、匹配和替换特定的模式。re 模块提供了许多函数来处理正则表达式。

正则表达式语法介绍

1. 基本字符匹配

  • 普通字符:直接匹配字符本身。例如,a 匹配字符 a

  • .:匹配任意单个字符(除了换行符 \n)。

2. 字符集

  • [abc]:匹配字符集中的任意一个字符。例如,[abc] 可以匹配 ab 或 c

  • [^abc]:匹配不在字符集中的任意一个字符。例如,[^abc] 可以匹配除了 abc 之外的任意字符。

  • [a-z]:匹配从 a 到 z 的任意一个字符。

  • [A-Z]:匹配从 A 到 Z 的任意一个字符。

  • [0-9]:匹配从 0 到 9 的任意一个字符。

3. 预定义字符集

  • \d:匹配任意数字字符,等价于 [0-9]

  • \D:匹配任意非数字字符,等价于 [^0-9]

  • \w:匹配任意字母、数字或下划线字符,等价于 [a-zA-Z0-9_]

  • \W:匹配任意非字母、数字或下划线字符,等价于 [^a-zA-Z0-9_]

  • \s:匹配任意空白字符(包括空格、制表符、换行符等)。

  • \S:匹配任意非空白字符。

4. 重复匹配

  • *:匹配前面的字符零次或多次。例如,a* 可以匹配 """a""aa" 等。

  • +:匹配前面的字符一次或多次。例如,a+ 可以匹配 "a""aa""aaa" 等。

  • ?:匹配前面的字符零次或一次。例如,a? 可以匹配 "" 或 "a"

  • {n}:匹配前面的字符恰好 n 次。例如,a{3} 可以匹配 "aaa"

  • {n,}:匹配前面的字符至少 n 次。例如,a{2,} 可以匹配 "aa""aaa""aaaa" 等。

  • {n,m}:匹配前面的字符至少 n 次,至多 m 次。例如,a{2,4} 可以匹配 "aa""aaa""aaaa"

5. 边界匹配

  • ^:匹配字符串的开头。例如,^abc 匹配以 abc 开头的字符串。

  • $:匹配字符串的结尾。例如,abc$ 匹配以 abc 结尾的字符串。

  • \b:匹配单词边界。例如,\bword\b 匹配独立的单词 word

  • \B:匹配非单词边界。例如,\Bword\B 匹配不在单词边界的 word

6. 分组与捕获

  • ():用于分组和捕获子表达式。例如,(abc)+ 可以匹配 "abc""abcabc" 等。

  • (?:...):非捕获分组,只分组不捕获。例如,(?:abc)+ 可以匹配 "abc""abcabc" 等,但不捕获分组内容。

7. 反向引用

  • \1\2 等:引用前面捕获的分组。例如,(\d+)-\1 可以匹配 "123-123"

8. 特殊字符转义

  • \:用于转义特殊字符。例如,\. 匹配字符 .

9. 常用正则表达式示例

  • 匹配邮箱地址[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}

  • 匹配URLhttps?://(?:www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(?:/[^\s]*)?

  • 匹配日期(YYYY-MM-DD)\d{4}-\d{2}-\d{2}

  • 匹配IP地址\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

re模块的用法

1、re.findall() 

在大字符串中查找符合正则表达式特点的式子

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

2、re.match() 

匹配整个字符串是否符合某个正则表达式特点

match = re.match(r'\d+', '123abc')
if match:
    print("匹配成功:", match.group())  # 输出: 匹配成功: 123
else:
    print("匹配失败")

3、re.search() 

从左向右匹配正则表达式,只会匹配一次符合条件, 得到的是一个对象

search = re.search(r'\d+', 'abc123def')
if search:
    print("匹配成功:", search.group())  # 输出: 匹配成功: 123
else:
    print("匹配失败")

4、re.split()

根据选项将字符串分割

split = re.split(r'\d+', 'abc123def456ghi')
print(split)  # 输出: ['abc', 'def', 'ghi']

5、re.finditer()

返回一个迭代器,每个元素是一个匹配对象,包含字符串中所有非重叠的匹配结果

finditer = re.finditer(r'\d+', 'abc123def456ghi')
for match in finditer:
    print("匹配成功:", match.group())
# 输出:
# 匹配成功: 123
# 匹配成功: 456

6、re.fullmatch()

将字符串整体与正则表达式进行匹配

text = '安徽省-合肥市-蜀山区-浮山路'

res1 = re.fullmatch(f'(\w+)-(\w+)-(\w+)-(\w+)', text)
print(f"省份:{res1.group(1)}")
print(f"市:{res1.group(2)}")
print(f"区:{res1.group(3)}")
print(f"街道:{res1.group(4)}")

# 输出:
# 省份:安徽省
# 市:合肥市
# 区:蜀山区
# 街道:浮山路

7、re.sub() 

替换字符串中所有匹配的模式

sub = re.sub(r'\d+', 'X', 'abc123def456ghi')
print(sub)  # 输出: abcXdefXghi

总结

re 模块是 Python 中处理正则表达式的核心工具。通过 re 模块,你可以轻松地进行字符串的模式匹配、查找、替换和分割等操作。掌握正则表达式的基本语法和 re 模块的常用函数,将极大地提高你处理字符串的能力。


http://www.kler.cn/a/419662.html

相关文章:

  • 【浏览器】缓存与存储
  • Day4:生信新手笔记 — R语言简单命令与Rstudio配置
  • CAD 二次开发入门与实践:以 C# 为例
  • qt QToolBox详解
  • 【数据事务】.NET开源 ORM 框架 SqlSugar 系列
  • ARP表、MAC表、路由表的区别和各自作用
  • 【QNX+Android虚拟化方案】124 - VLAN配置 之 QNXAndroid 修改简单记录
  • java原生反序列化利用链7u21的学习
  • CCNA_SEC 第五天作业
  • 一款适用于教育行业的免费word插件
  • Stable Diffusion介绍
  • ARM 嵌入式处理器内核与架构深度剖析:解锁底层技术逻辑
  • Java中Logger定义的三种方式
  • 多点DMALL启动招股:将在港交所上市,聚焦数字零售服务
  • 在anaconda中为jupyter安装Nbextensions扩展
  • C++初阶——动态内存管理
  • android studio引用so库
  • 【Linux】文件操作的艺术——从基础到精通
  • 深度学习-52-AI应用实战之基于Yolo8的目标检测自动标注
  • 剖析go协程池实现原理
  • (简单5步实现)部署本地AI大语言模型聊天系统:Chatbox AI + grok2.0大模型
  • 6.824/6.5840 Lab 2: Key/Value Server
  • 农业强国助农平台:科技赋能,助力乡村振兴
  • 【学习笔记】检测基于RTOS的设计中的堆栈溢出-第2部分
  • 威胁驱动的网络安全方法论
  • 如何在 Ubuntu 18.04 上设置 Apache 虚拟主机