在Python中获取最高的字符串版本号



我试图在Python中获得最高版本的字符串版本。我试图对列表进行排序,但是当然,这没有像Python那样轻松地对字符串表示。

为此,我正在尝试与Regex一起工作,但它不匹配。

字符串看起来像这样:

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。同样,现在我将其分为两个循环。我相信,它以2*o(log(n))运行,这不是最佳的。如何以快速而简单的方式获得最高版本?

您可以使用sortedlist.sort使用key

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

它也可以与正则表达式一起使用,就像第一次尝试时:

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

该表达式从字符串(^)的开头搜索模式,将所有字符与_不同(我希望您的主题都不有一个,否则两个答案都是错误的),然后找到'_V'并采用版本号。
无需匹配_ext,所以它是否在那里都没关系!

最新更新