[英]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))中運行,這不是我認為的最佳。 如何以快速簡單的方式獲得最高版本?
您可以使用sorted
或list.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.