python需要帮助来提取模式

python需要帮助来提取模式,python,regex,python-2.7,Python,Regex,Python 2.7,从下面的列表中,我尝试只提取数字(整数和浮点)和版本NUM(仅用点分隔) 尝试了以下代码。它没有去掉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

从下面的列表中,我尝试只提取数字(整数和浮点)和版本NUM(仅用点分隔)

尝试了以下代码。它没有去掉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

正则表达式是一种方法。您可以使用过滤器完成相同的操作

>>> 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']

你可以试试列表

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']

把所有的都换掉。在字符串中,检查剩余字符是否为数字

def myfunc(self , img_list):
    ret = list()
    for i in img_list:
        if '.' in i and i.replace('.','').isdigit():
            ret.append(i)
    return ret

使用理解的另一个解决方案:

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']

这将错过像
3.3..4
3.3.
@FoxanNg试图只提取数字(整数和浮点)和版本num(仅用点分隔)。@XeroSmith谢谢。@XeroSmith by
miss
我的意思是你也将它们视为版本号,这不是。好的,我已经添加了另一个条件来检查是否。存在。应该可以了。啊,我明白了,这是意料之中的事。很抱歉给你带来了困惑。不管怎么说,你的答案比被接受的答案要好得多(Xero的)。
[u'3.1.1', u'3.2', u'3.1.2', u'3', u'3.3.0', u'3.2.2']