2016-06-16 27 views
0

我有一個文本文件,如下圖所示:提取CPU信息用正則表達式

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

@bertramlau yuo實際上並不需要一個正則表達式... – wind85

+0

既然你保持沉默,我只是玩弄你的正則表達式。 ['(?IM)CPU:[^ E5G​​iL] {0,5} \ S?(?:\ S *(?:英特爾|至強|處理器))* \ S *([A-Z0-9 - ] { 0,3} \ s?\ d {3,4})\ w * \ b。*?(\ d {1,})$'](https://regex101.com/r/jU3wG3/1)is我只能建議。 –

回答

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 
+0

謝謝!這是一種工作方式,但不是正則表達式 – bertramlau

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') 

請提供反饋意見。如果我忘了什麼,我會很樂意修復它

+0

我運行你的python代碼。這不適用於所有情況。例如:cpu:intel E5506 * 2和cpu:G620 * 2 – bertramlau

+0

@bertramlau和現在? – feakuru

+0

這不工作在'cpu:Xeon E5405 * 2'案件 – bertramlau