Python--正则表达式

正则表达式(Regular Expressions, 简称 regex 或 RE)是一种强大的工具,用于匹配和操作字符串。Python 中的 re 模块提供了一整套操作正则表达式的功能,使得我们可以轻松地对字符串进行搜索、匹配、替换等操作。下面详细阐述正则表达式的使用及其常用操作。

1. 正则表达式基础

正则表达式由普通字符和特殊字符(也称为元字符)组成。元字符用于指定字符串的模式。以下是一些常用的元字符:

  • .: 匹配任意单个字符,除换行符外。
  • ^: 匹配字符串的开始。
  • $: 匹配字符串的结尾。
  • *: 匹配前一个字符 0 次或多次。
  • +: 匹配前一个字符 1 次或多次。
  • ?: 匹配前一个字符 0 次或 1 次。
  • []: 匹配括号内的任意字符,例如 [a-z] 表示匹配任意小写字母。
  • \: 转义字符,用于匹配元字符本身,比如 \. 匹配 .\\ 匹配 \

2. re 模块的常用操作

Python 的 re 模块提供了多种操作正则表达式的方法,常用的包括 match(), search(), findall(), sub() 等。

2.1 re.match()

re.match(pattern, string, flags=0) 用于从字符串的开头匹配正则表达式。如果开头部分匹配成功,返回一个匹配对象;否则返回 None

复制代码
import re

pattern = r'\d+'
string = "123abc456"
match = re.match(pattern, string)
if match:
    print("Match found:", match.group())  # 输出: Match found: 123
else:
    print("No match")

注意:match() 只从字符串的开始位置进行匹配,如果字符串开头不符合正则表达式,则返回 None

2.2 re.search()

re.search(pattern, string, flags=0) 用于在整个字符串中搜索与正则表达式匹配的第一个位置。如果找到,返回一个匹配对象;否则返回 None

复制代码
import re

pattern = r'\d+'
string = "abc123def456"
search = re.search(pattern, string)
if search:
    print("Search found:", search.group())  # 输出: Search found: 123
else:
    print("No match")

match() 不同,search() 可以匹配字符串中的任意位置。

2.3 re.findall()

re.findall(pattern, string, flags=0) 返回字符串中所有与正则表达式匹配的非重叠匹配项,以列表形式返回。

复制代码
import re

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

findall() 是最常用的函数之一,它可以提取所有符合条件的字符串片段。

2.4 re.sub()

re.sub(pattern, repl, string, count=0, flags=0) 用于替换字符串中所有匹配正则表达式的部分。repl 可以是一个字符串或一个函数,用于替换匹配到的部分。

复制代码
import re

pattern = r'\d+'
string = "abc123def456"
replaced_string = re.sub(pattern, "#", string)
print("Sub result:", replaced_string)  # 输出: Sub result: abc#def#

sub() 函数常用于字符串的清理和格式化。

3. 其他常用函数

  • re.split(pattern, string, maxsplit=0, flags=0): 按照正则表达式的匹配项将字符串分割为列表。
复制代码
import re

pattern = r'\d+'
string = "abc123def456"
splitted_list = re.split(pattern, string)
print("Split result:", splitted_list)  # 输出: Split result: ['abc', 'def', '']
  • re.compile(pattern, flags=0): 将正则表达式编译成正则表达式对象,以提高匹配效率。
复制代码
import re

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

4. 总结

正则表达式是处理字符串的利器,它可以高效地执行匹配、搜索、替换等操作。在 Python 中,re 模块提供了丰富的函数来使用正则表达式。match() 用于从字符串开头匹配,search() 在字符串中搜索第一个匹配项,findall() 返回所有匹配项,sub() 替换匹配项。掌握这些基本操作,可以大大提升处理字符串的效率。

此外,正则表达式还支持很多高级特性,如捕获组、非捕获组、前瞻和后顾等,使得它在复杂字符串处理任务中更加得心应手。

相关推荐
_深海凉_33 分钟前
LeetCode热题100-颜色分类
python·算法·leetcode
AC赳赳老秦1 小时前
OpenClaw email技能:批量发送邮件、自动回复,高效处理工作邮件
运维·人工智能·python·django·自动化·deepseek·openclaw
zhaoshuzhaoshu1 小时前
Python 语法之数据结构详细解析
python
AI问答工程师1 小时前
Meta Muse Spark 的"思维压缩"到底是什么?我用 Python 复现了核心思路(附代码)
人工智能·python
zfan5202 小时前
python对Excel数据处理(1)
python·excel·pandas
小饕3 小时前
我从零搭建 RAG 学到的 10 件事
python
老歌老听老掉牙3 小时前
PyQt5+Qt Designer实战:可视化设计智能参数配置界面,告别手动布局时代!
python·qt
格鸰爱童话3 小时前
向AI学习项目技能(六)
java·人工智能·spring boot·python·学习
悟空爬虫-彪哥3 小时前
VRChat开发环境配置,零基础教程
python
数据知道3 小时前
《 Claude Code源码分析与实践》专栏目录
python·ai·github·claude code·claw code