2026-02-16 06:37:59
正则表达式是一种强大的字符串匹配工具,可用于从复杂文本中提取特定内容。以下是关键要点总结:
一、核心概念位置匹配:
^ 匹配字符串开头
$ 匹配字符串结尾
A 和 Z 类似但更严格
字符匹配:
. 匹配任意字符(除换行符)
d 匹配数字(等价于[0-9])
w 匹配字母数字及下划线
[u4e00-u9fa5] 专门匹配中文字符
数量控制:
* 匹配0次或多次
+ 匹配1次或多次
? 匹配0次或1次(非贪婪模式)
{n,m} 匹配n到m次
贪婪与非贪婪模式:
默认贪婪模式(如a.*b会匹配最长可能)
非贪婪模式(如a.*?b匹配最短可能)
分组捕获:
() 表示捕获组
(?:) 表示非捕获组
1 引用第一个捕获组
边界匹配:
b 匹配单词边界
(?=...) 前向肯定断言
(?!...) 前向否定断言
匹配函数:
re.match():从开头匹配(返回Match对象或None)
re.search():扫描整个字符串(返回第一个匹配)
re.findall():返回所有匹配的列表
替换功能:
re.sub():替换匹配内容(支持函数式替换)
修饰符:
re.I:忽略大小写
re.S:使.匹配换行符
re.M:多行模式(影响^和$)
提取HTML标签内容:
import rehtml = "<div>测试内容</div>"pattern = r"<div>(.*?)</div>"result = re.findall(pattern, html) # 输出:['测试内容']处理中文文本:
text = "联系邮箱:test@example.com"pattern = r"[u4e00-u9fa5]+" # 匹配所有中文print(re.findall(pattern, text)) # 输出:['联系邮箱']非贪婪匹配:
html = "<p>段落1</p><p>段落2</p>"pattern = r"<p>(.*?)</p>" # 非贪婪模式print(re.findall(pattern, html)) # 输出:['段落1', '段落2']掌握这些核心概念后,可以高效处理大多数文本提取需求。实际应用中建议结合具体场景选择最简洁有效的表达式,并通过测试验证边界情况。