获取字符串的数字并对其进行操作

Take numbers of a string and operate with them

我有这样一个字符串:

vserver           volume                                           changelog-usage 
----------------- ------------------------------------------------ --------------- 
svm_name name_of_volume_1 11%              
svm_name2 name_of_volume_2 10%              
svm_name3 name_of_volume_3 0%              
svm_dSN_SM2M_NAS  shorter_name_4                                 15%              

我正在使用此代码:

matchArr = string.split("\n")
for i in matchArr:
  tmpMatchArr = i.split(" ")
  for i in range(0, len(tmpMatchArr)):
    if int(tmpMatchArr[2].replace("%", "")) < 10:
      break
    if i == 2:
      finalString += " = " + tmpMatchArr[i] + ", "
    elif i == 1:
      finalString += tmpMatchArr[i]
    else:
      finalString += tmpMatchArr[i] + "."
  
print(finalString);

问题是,我只想取大于 10 的那些值,但我收到此错误:

IndexError: list index out of range

所需的输出是这样的:

WARNING: Usage greater than 10% at: svm_name.name_of_volume_1=11%, svm_dSN_SM2M_NAS.shorter_name_4=15%

编辑:选择数字的正则表达式不是一个选项,因为卷的名称已经包含一些数字...

如果您想简化一些事情,您可能需要考虑正则表达式:

import re

warnings = re.findall('\n(\S+)\s+(\S+)\s+(\d+)\%', string)
print('WARNING: Usage greater than 10% at: '
      + ', '.join('{}.{}={}%'.format(*w) for w in warnings if int(w[2]) > 10))

输出:

WARNING: Usage greater than 10% at: svm_name.name_of_volume_1=11%, svm_dSN_SM2M_NAS.shorter_name_4=15%