使用正则表达式从文本中提取cpu信息

时间:2016-06-16 09:04:29

标签: python regex

我有一个如下文字文件:

cpu:5120*2
cpu:5140*2
cpu:5335*2
cpu:5506*2
cpu:5520*2
cpu:5560*2
cpu:5606*2
cpu:5620*2
cpu:5640*2
cpu:E-5620*2
cpu:E-5700*2
cpu:E2430*2
cpu:E5 2603*2
cpu:E5-2407*2
cpu:E5-2407*2
cpu:E5-2420*2
cpu:E5-2420 v2*2
cpu:E5-2609 v2*2
cpu:E5-2618Lv3*2
cpu:E5-2620*2
cpu:E5-2620 V2*2
cpu:E5-2620 V3*2
cpu:E5-2620V2*2
cpu:E5-2620v3*2
cpu:E5-2630*2
cpu:E5-2630 V3*2
cpu:E5-2640 V2*2
cpu:E5-2640 v3*2
cpu:E5-2640v3*2
cpu:E5-2650*2
cpu:E5-2650 V2*2
cpu:E5-2650 V3*2
cpu:E5-2660 V2*2
cpu:E5-2660 V3*2
cpu:E5-2670*2
cpu:E5-5620*2
cpu:E5110*2
cpu:E5120*2
cpu:E5300*2
cpu:E5310*2
cpu:E5320*2
cpu:E5335*2
cpu:E5345*2
cpu:E5405*2
cpu:E5410*2
cpu:E5504*2
cpu:E5506*2
cpu:E5520*2
cpu:E5560*2
cpu:E5606*2
cpu:E5607*2
cpu:E5620*2
cpu:E5640*2
cpu:E5645*2
cpu:E7500*2
cpu:G2020*2
cpu:G620*2
cpu:G630*2
cpu:G860*2
cpu:i3-2310M*2
cpu:i3-2330U*2
cpu:i3-4005U*2
cpu:i3-4160*2
cpu:i5-3470M*2
cpu:i5-4310M*2
cpu:i5-5200*2
cpu:i5-6200U*2
cpu:Intel E5 2603V3*2
cpu:Intel E5-2620*2
cpu:Intel E5-2650*2
cpu:Intel E5-2670*2
cpu:intel E5506*2
cpu:Intel E5620*2
cpu:Intel Xeon  Processor E5-2620 v2 (15M Cache, 2.10 GHz)CPU*2
cpu:L5520*2
cpu:Xeon E5-2609*2
cpu:Xeon E5405*2
cpu:Xeon E5504*2
cpu:Xeon E5506*2
cpu:Xeon E5520*2
cpu:Xeon E5620*2
cpu:Xeon E5640*2

我希望得到这样的cpu类型:

5120 2
5140 2
5335 2
5506 2
5520 2
5560 2
5606 2
5620 2
5640 2
E-5620 2
E-5700 2
E2430 2
E5 2603 2
E5-2407 2
E5-2407 2
E5-2420 2
E5-2420 2
E5-2609 2
E5-2618 2
E5-2620 2
E5-2620 2
E5-2620 2
E5-2620 2
E5-2620 2
E5-2630 2
E5-2630 2
E5-2640 2
E5-2640 2
E5-2640 2
E5-2650 2
E5-2650 2
E5-2650 2
E5-2660 2
E5-2660 2
E5-2670 2
E5-5620 2
E5110 2
E5120 2
E5300 2
E5310 2
E5320 2
E5335 2
E5345 2
E5405 2
E5410 2
E5504 2
E5506 2
E5520 2
E5560 2
E5606 2
E5607 2
E5620 2
E5640 2
E5645 2
E7500 2
G2020 2
G620 2
G630 2
G860 2
i3-2310 2
i3-2330 2
i3-4005 2
i3-4160 2
i5-3470 2
i5-4310 2
i5-5200 2
i5-6200 2
E5 2603 2
E5-2620 2
E5-2650 2
E5-2670 2
E5506 2
E5620 2
E5-2620 2
L5520 2
E5-2609 2
E5405 2
E5504 2
E5506 2
E5520 2
E5620 2
E5640 2

我尝试使用这个正则表达式

cpu:[^E5GiL]{0,5}\s?([a-zA-Z\-0-9]{0,3}\s?\d{3,4})\w?\b.*?\*(\d{1,})

进行匹配,但失败

如何使用一个正则表达式从文本中提取所有数据?

2 个答案:

答案 0 :(得分:0)

lines = tuple(open('filename.txt', 'r'))
for line in lines :
    print line.replace('cpu:','').replace('*',' ').replace('V2','').replace('V3','')

在这种情况下,怎么样:

import re
data=open('filename.txt', 'r').read()
out = re.sub("cpu:", '', data)
out = re.sub("V2", '', out)
out = re.sub("V3", '', out)
out = out.replace('*',' ')
print out

答案 1 :(得分:0)

KHELILI的决定很精彩,但既然你正在询问一个正则表达式,那么我认为这是一个使用正则表达式的脚本符合这种情况:

import re

while input('Continue? [y/n] ') == 'y':
    check = input('The string: ')
    res = (re.match('^cpu:([A-Za-z\s]*\s)?([A-Za-z]*\d{0,1}[-\s]{0,1}\d{3,4})([A-Za-z0-9\.\,\(\)\s]*)\*(\d)', check))
    try:
        print(res.group(2), res.group(4))
    except Exception:
        print('Error')

请提供反馈。如果我忘记了什么,我很乐意解决它