Python——re库

张开发
2026/4/19 17:58:02 15 分钟阅读

分享文章

Python——re库
Python 正则表达式 re 库一、re 是什么二、re 最常用 4 个方法1. re.findall() → **提取所有匹配内容最常用**2. re.search() → **查找第一个匹配抓单个值**3. re.match() → **从开头匹配**4. re.sub() → **替换字符串**三、必须记住的 8 个正则符号测试必背四、**真实场景示例**从串口日志提取 **电压值**提取 **设备ID / 表号**提取 **版本号**提取 **IP地址**提取 **MAC地址**判断日志是否包含 **错误信息**提取 **16进制报文**提取 **阀控状态**五、最常用正则模板1. 提取整数2. 提取小数电压/电流3. 提取设备编号4. 提取版本号5. 提取中文6. 提取16进制数据六、正则面试题1. 什么是正则表达式2. re.search 和 re.findall 区别3. 括号 () 作用4. \d \w . 分别代表什么5. 正则里如何匹配小数点一、re 是什么re 正则表达式Regular Expression作用在字符串里 查找、提取、匹配、替换 指定内容一句话从一堆文本里精准抓你想要的数据二、re 最常用 4 个方法1.re.findall()→提取所有匹配内容最常用从文本里把所有符合规则的内容全部抓出来返回列表。importre log设备电压3.3V电流150mA状态正常resultre.findall(r\d\.?\d*,log)# 提取所有数字print(result)# [3.3, 150]2.re.search()→查找第一个匹配抓单个值只找第一个符合条件的内容拿到就停。log设备IDDEV_123456状态在线resre.search(rDEV_(\d),log)ifres:print(res.group())# DEV_123456print(res.group(1))# 123456只抓括号里的内容3.re.match()→从开头匹配一般用来判断字符串是不是以某内容开头。msgVALVE_OPEN:成功ifre.match(rVALVE,msg):print(是阀门指令)4.re.sub()→替换字符串把日志里敏感信息、无用内容替换掉。logtoken1234567890abcdefnew_logre.sub(rtoken[\w],token***,log)print(new_log)# token***三、必须记住的 8 个正则符号测试必背不用背多这 8 个足够工作用符号作用示例\d匹配数字0-9\w字母/数字/下划线A-z0-9_至少1个\d → 123*0个或多个\d* → 空/123.任意字符?非贪婪少匹配防止抓多()分组提取最重要只抓括号里内容\.匹配小数点3.3V四、真实场景示例从串口日志提取电压值importre logDC33V: 3.28V, CURRENT: 145mAvoltre.findall(r(\d\.\d)V,log)[0]print(volt)# 3.28提取设备ID / 表号log设备编号METER_2305001在线meter_nore.search(rMETER_(\d),log).group(1)print(meter_no)# 2305001提取版本号log固件版本V2.1.5_BUILD2025verre.findall(rV(\d\.\d\.\d),log)[0]print(ver)# 2.1.5提取IP地址log连接服务器192.168.1.100:8080ipre.findall(r\d\.\d\.\d\.\d,log)[0]print(ip)# 192.168.1.100提取MAC地址logMAC: 00:11:22:33:44:55macre.findall(r([0-9A-Fa-f:]{17}),log)[0]print(mac)判断日志是否包含错误信息logERROR: 阀门打开失败ifre.search(rERROR|失败|异常,log):print(设备报错了)提取16进制报文log接收报文68 01 02 03 16datare.findall(r[0-9A-Fa-f]{2},log)print(data)# [68,01,02,03,16]提取阀控状态log阀门状态VALVE_OPEN 开阀成功statusre.findall(rVALVE_(\w),log)[0]print(status)# OPEN五、最常用正则模板1. 提取整数re.findall(r\d,text)2. 提取小数电压/电流re.findall(r\d\.\d,text)3. 提取设备编号# 只取(\d)匹配的内容re.search(rDEV_(\d),text).group(1)4. 提取版本号re.findall(rV(\d\.\d\.\d),text)5. 提取中文re.findall(r[\u4e00-\u9fa5],text)6. 提取16进制数据re.findall(r[0-9A-Fa-f]{2},text)六、正则面试题1. 什么是正则表达式答用来在字符串中匹配、查找、提取、替换内容的规则表达式。2.re.search和re.findall区别search找第一个匹配findall找所有匹配返回列表3. 括号()作用答分组提取只抓括号里需要的内容。4.\d\w.分别代表什么\d数字\w字母数字下划线.任意字符5. 正则里如何匹配小数点答必须加转义\.

更多文章