2017-04-15 108 views
0

我有以下行:正則表達式A「或」 B

9 (1224) Starting item export: IPM.Appointment, Zomverbanden (wielen) monteren, 2,61 B, John \Calendar, E:\tmp\John Kn 
    9 (1224) Starting item export: IPM.Appointment, [JK], 7,97 KB, John Knappers\Calendar, E: 
    9 (1224) Starting item export: IPM.Appointment, Niet op kantoor (Auto), 1,66 GB, John \Calendar, E:\tmp\John . 
    9 (1224) Starting item export: IPM.Appointment, Bespip/Tobias , 9,13 KB, John \Calendar, E:\tmp\John K 
    9 (1224) Starting item export: IPM.Appointment, Q-ware el/Mehan [JK], 8,01 MB, \Calendar, E:\tmp\J 

我怎樣可以找到這些字節和兆字節等上的匹配圖案?

我已經試過

res = re.findall(r'(\d*,\d* KB)|(\d*,\d* MB) | (\d*,\d* B)| (\d*,\d* GB)', i) 

但它返回我的字典的4元組,但我只需要1個項目的每一行:

2,61 B 
7,97 KB 
1,66 GB 
9,13 KB 
8,01 MB 
+0

是什麼'i'在你的代碼,整個文本或者多行之一嗎?而像「10 MB」這樣的值呢? – RomanPerekhrest

+0

這似乎不可行,你可以放心,匹配的數量等於行數。 – sln

回答

0

你可以把它改寫使它更短:

\d+,\d* (?:KB|MB|B|GB) 

Live Demo

你可以使它更短:

\d+,\d* [KMG]?B 

Live Demo

當然這是假設有一個在數字和單位之間的單一空間。而不是你可能擁有的空間[ \t]+,使它成爲多個空間或甚至標籤。

如果10 KB是(無小數),那麼你可以做有效的:

\d+(,\d+)? [KMG]?B 
+0

這太棒了,謝謝! – feedthemachine

+0

不客氣。 – Vallentin

相關問題