Python正则表达式是通过re模块提供的功能,实现对字符串的复杂模式匹配、查找、替换等操作,相比普通字符串方法,它能处理更灵活的文本规则,适合批量处理格式不固定的文本内容。

正则表达式基础语法
在使用re模块前,需要先了解常见的正则匹配符号,以下是常用的基础规则:
| 符号 | 含义 |
|---|---|
| . | 匹配除换行符外的任意单个字符 |
| d | 匹配任意单个数字,等价于[0-9] |
| w | 匹配字母、数字、下划线 |
| * | 匹配前一个字符0次或多次 |
| + | 匹配前一个字符1次或多次 |
| {n} | 匹配前一个字符恰好n次 | >
字符串匹配实战
基础匹配方法
re模块提供了re.match、re.search、re.findall三种常用的匹配方法,使用场景不同:
re.match:从字符串开头开始匹配,只匹配开头的符合规则的内容re.search:扫描整个字符串,返回第一个匹配到的结果re.findall:扫描整个字符串,返回所有匹配结果的列表
实战案例:匹配手机号
国内手机号通常是11位数字,开头为1,第二位为3-9的数字,完整的正则规则可以写为^1[3-9]d{9}$,以下是匹配示例:
import re
# 待匹配的字符串列表
test_strs = ["13812345678", "12345678901", "15987654321", "abc13800000000"]
# 手机号正则规则
phone_pattern = r"^1[3-9]d{9}$"
for s in test_strs:
# 使用re.fullmatch匹配完整字符串
result = re.fullmatch(phone_pattern, s)
if result:
print(f"字符串{s}是合法手机号")
else:
print(f"字符串{s}不是合法手机号")
字符串替换实战
基础替换方法
re模块的核心替换方法是re.sub,语法为re.sub(pattern, repl, string, count=0, flags=0),其中pattern是正则规则,repl是替换后的内容,string是原字符串,count是替换次数,默认替换所有匹配项。
实战案例:替换文本中的敏感词
假设需要将文本中的敏感词替换为星号,以下是实现代码:
import re
# 原文本
text = "这个产品的质量很差,客服态度也不好,建议大家不要购买,差评差评"
# 敏感词列表,转为正则规则,用|分隔表示匹配任意一个
sensitive_words = ["差", "不好", "不要"]
pattern = r"|".join(sensitive_words)
# 替换敏感词为对应长度的星号
def replace_func(match):
# match.group()获取匹配到的内容,返回对应长度的星号
return "*" * len(match.group())
new_text = re.sub(pattern, replace_func, text)
print("替换后的文本:", new_text)
实战案例:格式化日期字符串
将格式为年/月/日的日期替换为年-月-日格式,示例代码如下:
import re
date_str = "2024/05/20, 2024/12/01, 2023/08/15"
# 正则规则匹配年/月/日格式,用分组捕获年、月、日
pattern = r"(d{4})/(d{2})/(d{2})"
# 替换为分组内容拼接的-格式
new_date_str = re.sub(pattern, r"1-2-3", date_str)
print("格式化后的日期字符串:", new_date_str)
注意事项
使用正则表达式时需要注意转义问题,如果匹配的内容包含正则特殊符号,需要用反斜杠转义,比如匹配.本身需要写为.。另外,复杂的正则规则建议先通过在线正则测试工具验证逻辑,再写入代码中,减少调试成本。