如何在Python中使用正则表达式提取value字段后的数值
可行实现方案
你原有代码的问题有三个:
- 正则规则只匹配了"value"字符串本身,没有捕获后面跟随的数值
re.findall接收的参数是字符串,不能直接传入文件对象- 最后打印的
value变量根本没有定义
你要的提取逻辑用下面的代码就能直接跑,10万行文本的处理速度完全够用,不需要逐行手动遍历:
import re # 读取文件全部内容,根据你文件实际编码改encoding参数即可 with open('filename.txt', 'r', encoding='utf-8') as f: file_content = f.read() # 正则匹配所有value: 后面的数值,自动兼容冒号后多空格、整数/浮点数场景 match_values = re.findall(r'value:\s*(\d+\.?\d*)', file_content) # 如果需要把提取结果转成浮点数类型,取消注释下面这行即可 # match_values = [float(item) for item in match_values] print(match_values)
正则规则说明
使用的匹配规则r'value:\s*(\d+\.?\d*)'各部分作用:
value::匹配固定前缀文本,定位到目标行的特征字段\s*:匹配冒号后0到多个空白字符,兼容冒号后多打空格、制表符的不规范格式(\d+\.?\d*):捕获组,会被findall直接返回匹配内容,其中\d+匹配整数部分,\.?匹配可选的小数点,\d*匹配小数点后0到多位数字,整数、浮点数都能正常识别- 如果你的数值可能包含负数,把规则改成
r'value:\s*(-?\d+\.?\d*)'即可,新增的-?用来匹配可选的负号
内容的提问来源于stack exchange,提问作者user17350567
相关产品推荐
相关产品推荐

