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

Python正则表达式字符串组成教程 - 详解元字符与re模块实战

Python正则表达式字符串组成完全指南

一、正则表达式基础概念

正则表达式是用于匹配和处理文本的强大工具,由普通字符特殊字符(元字符)组成。

二、re模块核心功能

Python通过re模块提供正则支持,主要函数:

  • re.match() - 从字符串起始位置匹配
  • re.search() - 扫描整个字符串查找匹配
  • re.findall() - 返回所有匹配结果列表
  • re.sub() - 替换匹配内容
  • re.compile() - 预编译正则表达式

三、正则表达式组成元素

1. 普通字符

字母、数字、汉字等直接匹配自身:

regex = "python"
匹配字符串中的"python"

2. 元字符(特殊字符)

元字符 功能说明 示例
. 匹配任意字符(除换行符) "p.thon" 匹配"python"或"pYthon"
^ 匹配字符串开头 "^Hello" 匹配开头的"Hello"
$ 匹配字符串结尾 "end$" 匹配结尾的"end"
* 匹配前字符0次或多次 "py*" 匹配"p"、"py"、"pyy"等
+ 匹配前字符1次或多次 "py+" 匹配"py"、"pyy"但不匹配"p"
? 匹配前字符0次或1次 "py?thon" 匹配"python"或"pthon"
{m,n} 匹配前字符m到n次 "py{2,4}" 匹配"pyy"、"pyyy"、"pyyyy"
[ ] 匹配字符集中的任意字符 "[Pp]ython" 匹配"Python"或"python"
| 或操作符 "python|Java" 匹配"python"或"Java"
( ) 分组捕获 "(py)+" 匹配"py"、"pypy"等
\ 转义特殊字符 "\." 匹配真正的点号

四、高级匹配技巧

1. 分组捕获

import re
text = "2023-12-01"
result = re.search(r"(\d{4})-(\d{2})-(\d{2})", text)
print(result.groups())  # 输出:('2023', '12', '01')
print(result.group(1))  # 输出:2023

2. 贪婪与非贪婪匹配

# 贪婪匹配(默认)
re.findall(r"<.*>", "<div>test</div>") 
# 结果:['<div>test</div>']

# 非贪婪匹配(加?)
re.findall(r"<.*?>", "<div>test</div>") 
# 结果:['<div>', '</div>']

3. 预编译正则表达式

pattern = re.compile(r"\d{3}-\d{4}")
result = pattern.findall("电话:010-1234, 021-5678")
print(result)  # 输出:['010-1234', '021-5678']

五、完整实战示例

import re

# 邮箱验证
emails = "联系:user@example.com, admin@test.org"
valid_emails = re.findall(r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b", emails)
print(valid_emails)  # 输出匹配的邮箱列表

# HTML标签内容提取
html = "<h1>标题</h1><p>正文内容</p>"
text_content = re.sub(r"<.*?>", "", html)
print(text_content)  # 输出:标题正文内容

# 数据清洗
data = "价格:¥128.50, 重量:2.5kg"
numbers = re.findall(r"\d+\.?\d*", data)
print(numbers)  # 输出:['128.50', '2.5']

六、总结要点

  • 正则表达式 = 普通字符 + 元字符
  • 关键元字符:. ^ $ * + ? {} [] \ | ()
  • 使用re.match/search/findall/sub进行匹配操作
  • 重要概念:分组捕获、贪婪/非贪婪匹配
  • 复杂正则使用re.compile提升性能

发表评论