簡體   English   中英

從Python中的字符串中提取數字和大小信息(KB,MB等)

[英]Extract Numbers and Size Information (KB, MB, etc) from a String in Python

我有這樣的字符串

"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 .......

如何使用正則表達式提取尺寸信息

該腳本:

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

它以字節為單位找到的大小。

以下正則表達式應驗證您要匹配的大小字符串:

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

這是一個可以測試此正則表達式的鏈接:

正則表達式101

您可以使用如下所示的正則表達式來搜索大小和單位(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”是千位有效的符號,而不是千位...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM