[英]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)
我想從上面的字符串中分離出44
和MB
。 我已經寫了這段代碼來提取數字
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
這是一個可以測試此正則表達式的鏈接:
您可以使用如下所示的正則表達式來搜索大小和單位(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.