获取Python中最高的String版本号

问题描述 投票:5回答:2

我试图在Python中获得字符串的最高版本。我试图对列表进行排序,但这当然不像Python那样容易排序字符串表示。

为此,我试图使用正则表达式,但它不知何故不匹配。

字符串看起来像这样:

topic_v10_ext2
topic_v20_ext2
topic_v2_ext2
topic_v5_ext2
topic_v7_ext2

我的正则表达式看起来像这样。

version_no = re.search("(?:_v([0-9]+))?", v.name)

我正在考虑将名称保存在列表中,并查找列表中要返回的最高v_xx。此外,我现在在两个FOR循环中这样做。哪个在2 * O(log(n))中运行,这不是我认为的最佳。如何以快速简单的方式获得最高版本?

python
2个回答
7
投票

你可以使用sortedlist.sortkey

sorted(l, key=lambda x:int(x.split('_')[1][1:]), reverse=True)
['topic_v20_ext2',
 'topic_v10_ext2',
 'topic_v7_ext2',
 'topic_v5_ext2',
 'topic_v2_ext2']
  • x.split('_'):返回分裂的str,例如:['topic', 'v20', 'ext2']
  • 由于版本是排序的关键,因此请通过x.split('_')[1]选择它
  • 选中的V20有不需要的字符'V',因此通过切割[1:]来重新选择它以获得所有数字。
  • 最后,将数字转换为int以进行数字排序。

此外,sorted默认返回排序的升序。由于您需要降序,请使用reverse=True


0
投票

它也适用于正则表达式,如首次尝试:

import re
v = 'topic_v7_ext2'
version_no = re.search("^[^_]*_v([0-9]+)", v)
print(version_no.group(1))

该表达式从字符串的开头(^)搜索模式,获取与_不同的所有字符(我希望您的主题不能有一个,否则两个答案都是错误的),然后找到'_v'并获取版本号。 没有必要匹配_ext,所以它是否存在无关紧要!

© www.soinside.com 2019 - 2024. All rights reserved.