有没有更有效的方法来做到这一点:
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"))发布于 2015-05-23 00:03:58
正如@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.56https://stackoverflow.com/questions/30397404
复制相似问题