是否有更有效的方法:
if re.search("(?P<value>[0-9]*[.][0-9]*) (?P<units>KB|MB|GB|TB|PB)", line):
m = re.search("(?P<value>[0-9]*[.][0-9]*) (?P<units>KB|MB|GB|TB|PB)", line)
self.capacity = convert_to_bytes(m.group("units"), m.group("value"))
与C和其他语言一样,您可以执行此操作并避免执行两次搜索:
if m = re.search("(?P<value>[0-9]*[.][0-9]*) (?P<units>KB|MB|GB|TB|PB)", line):
self.capacity = convert_to_bytes(m.group("units"), m.group("value"))
这是更好的方法吗?
m = re.search("(?P<value>[0-9]*[.][0-9]*) (?P<units>KB|MB|GB|TB|PB)", line)
if m:
self.capacity = convert_to_bytes(m.group("units"), m.group("value"))
答案 0 :(得分:0)
正如@Christian Aichinger所说,这是正确的方法,但我有点削减正则表达式:
m = re.search("(?i)(?P<value>[0-9]+(?:\\.[0-9]+)?) (?P<units>KB|MB|GB|TB|PB)", line)
if m:
self.capacity = convert_to_bytes(m.group("units"), m.group("value"))
现在,[0-9]+(?:\\.[0-9]+)?
将匹配一些数字和可选的小数部分。请注意,如果您有其他小数点分隔符,或者您想要包含一千个数字分组符号,那么您更喜欢使用像[0-9]+(?:[., ][0-9]+)?
这样的字符类(俄语或波兰语,空格是有效的千位分组符号)。
此外,使正则表达式模式不区分大小写也是一个好主意,因此它也匹配1,000 kb
。
import re
line = "1.56 kb"
m = re.search("(?i)(?P<value>[0-9]+(?:\\.[0-9]+)?) (?P<units>KB|MB|GB|TB|PB)", line)
if m:
print m.group("units") + " - " + m.group("value")
输出:
kb - 1.56