2017-04-15 282 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

相关问题