从Python中的String中提取数字和大小信息(KB,MB等)

时间:2015-10-26 08:01:33

标签: python regex

我有一个像这样的字符串

"44MB\n" (it can be anything ranging from 44mb, 44 MB, 44 kb, 44 B)

我想从上面的字符串中分隔44MB。我写了这段代码来提取数字

import re
mystring = "44MB\n"
re.findall(r'\d+', mystring)

用于提取我希望避免使用if statements的大小

if "kb" mystring.lower(): 
    # Do stuffs
if .......

如何使用正则表达式提取大小信息

3 个答案:

答案 0 :(得分:4)

这个脚本:

import re


test_string = '44.5MB\n12b\n6.5GB\n12pb'

regex = re.compile(r'(\d+(?:\.\d+)?)\s*([kmgtp]?b)', re.IGNORECASE)

order = ['b', 'kb', 'mb', 'gb', 'tb', 'pb']

for value, unit in regex.findall(test_string):
    print(int(float(value) * (1024**order.index(unit.lower()))))

将打印:

46661632
12
6979321856
13510798882111488

以字节为单位找到的大小。

答案 1 :(得分:1)

以下正则表达式应验证您要匹配的大小字符串:

my_string = "44MB\n"
match_Obj = re.match(r'^(\d*)\s?([kmKM][Bb])$', my_string)

print "size: ", match_Obj.group(1)
print "units: ", match_Obj.group(2)

<强>输出:

size: 44
units: MB

这是一个可以测试此正则表达式的链接:

Regex101

答案 2 :(得分:0)

您可以使用以下正则表达式来搜索大小和单位(kb,mb)

re.compile(r"(?i)(?P<size>\d+)\s*(?P<unit>[km]?b)")

尝试一下:

>>> rgx = re.compile(r"(?i)(?P<size>\d+)\s*(?P<unit>[km]?b)")
>>> for x in ("44 mb", "44mb", "44kB"):
...     print(rgx.search(x).groups())
... 
('44', 'mb')
('44', 'mb')
('44', 'kB')

要处理其他前缀,只需更改正则表达式的unit部分即可。

值得注意的是,既然你说案件无关紧要,那么“kb”就是千字节的有效符号,而不是千字节......