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

时间:2019-02-22 14:21:29

标签: python

我正在尝试获取Python中最高版本的字符串。我试图对列表进行排序,但是它当然不像Python对字符串表示形式进行排序那样容易。

为此,我正在尝试使用正则表达式,但是它不匹配。

字符串如下:

topic_v10_ext2
topic_v20_ext2
topic_v2_ext2
topic_v5_ext2
topic_v7_ext2

我的Regex看起来像这样。

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

我正在考虑将名称保存在列表中,并寻找列表中最高的v_xx以返回。 同样现在,我正在两个FOR循环中执行此操作。我相信这不是最佳的2 * O(log(n))运行。 如何快速简便地获得最高版本?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

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