Python正则表达式重在解决实际文本问题:1.手机号提取需兼顾格式与防误匹配;2.日志清洗用re.sub去除时间戳和IP;3.文件重命名靠捕获组调换顺序;4.邮箱识别需边界控制并生成mailto链接。
Python正则表达式不是背语法,而是解决实际文本问题的工具。掌握几个典型场景的写法,比记满页符号更有用。
国内手机号通常为11位,以1开头,第二位常见3-9;但要注意避开“110”“119”等特殊号段,也别把带分隔符的字符串(如138-1234-5678)错当有效号码。
r'1[3-9]\d{9}' —— 精准抓纯数字11位手机号r'1[3-9]\d{2}[-\s]?\d{4}[-\s]?\d{4}',注意?表示前面的分隔符可有可无
r'\b1[3-9]\d{9}\b'
服务器日志常形如 [2025-03-15 14:22:08] 192.168.1.100 "GET /api/user HTTP/1.1" 200,想只留请求路径和状态码。
re.sub() 去掉开头时间:re.sub(r'^\[
.*?\]\s+', '', line)
re.sub(r'\d+\.\d+\.\d+\.\d+\s+"[^"]*"\s+', '', line)
re.sub(r'^\[.*?\]\s+\d+\.\d+\.\d+\.\d+\s+"[^"]*"\s+', '', line)
关键在捕获年月日并插入分隔符,同时调换字段顺序。
r'report_(\d{4})(\d{2})(\d{2})_v(\d+)\.txt',括号用于分组捕获r'\1-\2-\3-report-v\4.txt',\1 \2 \3 \4 对应四个捕获组re.sub(r'report_(\d{4})(\d{2})(\d{2})_v(\d+)\.txt', r'\1-\2-\3-report-v\4.txt', filename)
不是简单找@,要确保前后是合理字符边界,避免匹配到“abc@def@ghi”或“email@test.”这种无效串。
r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
re.sub() 生成链接:re.sub(r'(\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b)', r'\1', text)