从以下列表中,我试图仅提取数字(整数和浮点数)&版本号(仅用点分隔)。
[u'3.1.1', u'3.2', u'3.1.2', u'3', u'3.3.0', u'3.3.1-1', u'3.2.2', u'latest']
尝试以下代码。它没有取出3.3.1-1。需要有关正则表达式的帮助。 还有最快的方法吗?
def myfunc(self, img_list):
ret = list()
for i in img_list:
try:
if re.match("([\d.]+)", i):
ret.append(i)
elif float(i):
ret.append(i)
except Exception as e:
display.vvv("Error: %s" % str(e))
pass
return ret
答案 0 :(得分:1)
使用理解的另一种解决方案:
lst = [u'3.1.1', u'3.2', u'3.1.2', u'3', u'3.3.0', u'3.3.1-1', u'3.2.2', u'latest']
results = [i for i in lst if i.replace('.', '').isdigit()]
print results
输出:
[u'3.1.1', u'3.2', u'3.1.2', u'3', u'3.3.0', u'3.2.2']
答案 1 :(得分:0)
正则表达式是一种方法。您可以使用过滤器
完成相同的操作>>> lst = [u'3.1.1', u'3.2', u'3.1.2', u'3', u'3.3.0', u'3.3.1-1', u'3.2.2', u'latest']
>>> list(filter(lambda s: all(c.isdigit() or c == "." for c in s), lst))
['3.1.1', '3.2', '3.1.2', '3', '3.3.0', '3.2.2']
答案 2 :(得分:0)
你可以尝试列表理解。
lst = [u'3.1.1', u'3.2', u'3.1.2', u'3', u'3.3.0', u'3.3.1-1', u'3.2.2', u'latest']
print([e for e in lst if ''.join(e.split('.')).isdigit()])
打印:
['3.1.1', '3.2', '3.1.2', '3', '3.3.0', '3.2.2']
答案 3 :(得分:0)
只需更换全部。在字符串中并检查剩余字符是否为数字。
def myfunc(self , img_list):
ret = list()
for i in img_list:
if '.' in i and i.replace('.','').isdigit():
ret.append(i)
return ret