Python正则匹配文件内容遇问题:测试代码无输出求解
问题分析与解决
- 你的正则表达式逻辑错误:
(?m)^\(cpu\)\(.*\)是用来匹配以(cpu)(任意内容)开头的行,但/proc/cpuinfo的行格式是关键字: 值(比如processor : 0、cpu cores : 4),根本不存在带括号的(cpu)开头的行,所以自然匹配不到任何内容。
修正方案
1. 匹配所有包含cpu的行
如果你的需求是找出所有包含cpu的行,把正则改成如下形式,再用findall提取所有匹配结果:
import re import subprocess rx = re.compile("(?m)^.*cpu.*$") output = subprocess.run(["cat","/proc/cpuinfo"], stdout=subprocess.PIPE) lines = output.stdout.decode('utf-8') matches = rx.findall(lines) for match in matches: print(match)
2. 匹配特定CPU字段(比如cpu cores)
如果是想提取特定字段的值,比如CPU核心数,可以用更精准的正则:
import re import subprocess rx = re.compile("(?m)^cpu cores\s*:\s*(.*)$") output = subprocess.run(["cat","/proc/cpuinfo"], stdout=subprocess.PIPE) lines = output.stdout.decode('utf-8') cores = rx.findall(lines) print(cores) # 输出所有CPU核心数的列表
3. 更高效的文件读取方式
其实不需要调用cat命令,直接用Python内置的文件读取功能更高效:
import re rx = re.compile("(?m)^.*cpu.*$") with open("/proc/cpuinfo", "r") as f: lines = f.read() matches = rx.findall(lines) for match in matches: print(match)
内容的提问来源于stack exchange,提问作者olh
相关产品推荐
相关产品推荐

