正则表达式的应用
基础教学 1 min read

正则表达式的应用

Blog Author

正则表达式的应用


一、什么是正则表达式(Regular Expression)

正则表达式(简称Regex)是一种用于描述字符串模式的语法规则。

它广泛应用于文本匹配、检索、提取、替换等操作。无论是从日志中提取 IP 地址,验证邮箱格式,还是分割复杂的自然语言文本,正则表达式都能发挥极大的作用。


二、正则表达式的使用场景

使用场景 实际用途说明
数据验证 验证用户名、密码、邮箱、手机号格式是否合法
文本提取 从网页源码、日志中提取链接、手机号、邮箱等信息
敏感词过滤 识别并替换掉包含敏感内容的字符串
分词和字符串切割 将中文古诗按标点切分、按空格分句等
爬虫和数据清洗 抓取内容后快速清洗 HTML 标签、注释或冗余符号
IDE/编辑器高级查找替换 例如 VSCode / Sublime / Notepad++ 的“正则查找”功能

三、正则表达式语法基础教学

1. 字符匹配符

语法 说明 示例
. 匹配任意一个字符 a.bacb, arb
\w 匹配字母数字下划线 \w+abc_123
\d 匹配数字 \d{4}2025
\s 匹配空白字符 a\sba b
\b 匹配单词边界 \bcat\b 匹配 cat is cute 中的 cat,但不匹配 catalog

2. 次数控制

语法 含义 示例
* 匹配0次或多次 ab*cac, abc, abbbc
+ 匹配1次或多次 ab+cabc, abbbc
? 匹配0次或1次 ab?cac, abc
{n} 匹配n次 \d{6}123456
{n,} 匹配至少n次 \d{3,}123, 1234
{m,n} 匹配m到n次 \d{3,5}123, 12345

3. 分组与逻辑选择

语法 含义 示例
() 捕获分组 (\d{3})-(\d{4})
(?:...) 非捕获分组 不保留子组结果
`exp1 exp2` 或(分支) `abc 123` 可匹配任一

4. 断言(高级)

语法 类型 示例 用途
(?=exp) 正向先行断言 \d(?=元) 匹配“元”前的数字 提取价格前的数字
(?<=exp) 正向后行断言 (?<=编号:)\d+ 匹配“编号:”之后的数字 提取标签后的数据
(?!exp) 负向先行断言 abc(?!123) 不匹配后面为123的abc
(?<!exp) 负向后行断言 (?<!前缀)123 不匹配前缀123的123

四、Python 中的正则表达式实战讲解

Python 中提供 re 模块处理正则表达式,以下是常用函数的教学解析:

1. re.match() vs re.search()

import re


print(re.match(r'\d+', '2025年'))  # 从开头开始匹配,成功
print(re.match(r'\d+', '年2025'))  # 不从开头匹配,返回None


print(re.search(r'\d+', '年2025'))  # 成功,匹配到2025

2. re.findall()re.finditer()

text = "手机号: 13800001111, 15600002222"
pattern = r'1[3-9]\d{9}'
print(re.findall(pattern, text))  # 返回所有匹配字符串组成的列表


for m in re.finditer(pattern, text):
    print(m.group())  # 每次返回一个匹配对象

3. re.sub() 替换敏感词(过滤脏话)

dirty = 'fuck this shit'
cleaned = re.sub(r'fuck|shit', '*', dirty, flags=re.I)
print(cleaned)  # 输出:* this *

4. re.split() 字符串切割

poem = '床前明月光,疑是地上霜。举头望明月,低头思故乡。'
sentences = re.split(r'[,。]', poem)
print([s for s in sentences if s])  # 移除空串

五、正则表达式的最佳实践

✅ 最佳实践建议

做法 建议说明
使用原始字符串 例如 r'\d{3}' 而非 '\\d{3}',防止转义混乱
简化正则表达式 不要过度嵌套,拆解为多个步骤更易调试
用分组提高可读性 通过()将复杂结构分段,利于维护
加上注释 使用 (?#注释) 或代码层注释解释每段逻辑
借助工具测试 如 regex101.com 或 runoob 正则测试工具
考虑边界和非法输入 使用 ^$\b 明确限制

六、常见正则表达式模板库(参考)

场景 模板示例
邮箱地址 \b[\w.-]+@[\w.-]+\.\w+\b
中国手机号 1[3-9]\d{9}
身份证号 `\d{15} \d{17}[\dXx]`
IPv4地址 `((25[0-5] 2[0-4]\d 1\d{2} [1-9]?\d).){3}(25[0-5] 2[0-4]\d 1\d{2} [1-9]?\d)`
日期格式 \d{4}-\d{2}-\d{2}

七、小结:如何学好正则表达式

  1. 理解而非死记:理解每个元字符的意义是关键。
  2. 多练习多试错:调试正则表达式最好的方式是在线测试和写小脚本。
  3. 场景驱动:从自己的任务出发解决实际问题,例如文本处理、日志分析。
  4. 积累套路:收藏常用表达式,形成自己的模板库。
  5. 结合工具:掌握正则表达式调试工具,减少脑力负担。

附:推荐工具和资源


如你有特定使用场景(如爬虫、数据清洗、日志分析等),我可以继续为你量身定制更深度的正则表达式教学。是否需要进一步案例化讲解?