我有一个像这样的字符串
"44MB\n" (it can be anything ranging from 44mb, 44 MB, 44 kb, 44 B)
我想从上面的字符串中分隔44
和MB
。我写了这段代码来提取数字
import re
mystring = "44MB\n"
re.findall(r'\d+', mystring)
用于提取我希望避免使用if statements
的大小
if "kb" mystring.lower():
# Do stuffs
if .......
如何使用正则表达式提取大小信息
答案 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
这是一个可以测试此正则表达式的链接:
答案 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”就是千字节的有效符号,而不是千字节......