python需要帮助来提取模式

时间:2017-11-21 04:48:44

标签: python regex python-2.7

从以下列表中,我试图仅提取数字(整数和浮点数)&版本号(仅用点分隔)。

[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

4 个答案:

答案 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