簡體   English   中英

獲取Python中最高的String版本號

[英]Get the highest String Version number in Python

我試圖在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))中運行,這不是我認為的最佳。 如何以快速簡單的方式獲得最高版本?

您可以使用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('_') :返回x.split('_') str ,例如: ['topic', 'v20', 'ext2']
  • 由於版本是排序的關鍵,因此請通過x.split('_')[1]選擇它
  • 選定的V20具有不需要的字符'V',因此通過切片[1:]來重新選擇它以獲得所有數字。
  • 最后,將數字轉換為int以進行數字排序。

此外,默認sorted返回sorted的升序。 由於您需要降序,請使用reverse=True

它也適用於正則表達式,如首次嘗試:

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

該表達式從字符串的開頭(^)搜索模式,獲取與_不同的所有字符(我希望您的主題不能有一個,否則兩個答案都是錯誤的),然后找到'_v'並獲取版本號。
沒有必要匹配_ext,所以它是否存在無關緊要!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM