Насколько лучший способ нет такой вещи, пока ваш код решает эту проблему вы отправитесь, чтобы решить, и в этом кейс. Что касается производительности, вероятно, есть более быстрые способы достижения одного и того же, но даже со списком тысяч строк для разбора разницы в скорости будет минимальным или неразличимым. Поэтому я предполагаю, что вы попросите другой способ достичь той же цели, поэтому я написал небольшую функцию и несколько тестовых сегментов. Функция дает немного больше контроля.
def get_version(file_name, accuracy=0, sep=None):
'''
:string file_name is the string you want to parse
:int accuracy is the length of the output format
1 = 1 of 1.23.3
2 = 1.2 of 1.23.3
3 = 1.23 of 1.23.3
0 = 1.23.3 or full length
:string sep, is the string seperator you wish to use, 1.1, 1_1, 11 etc...
'''
if not sep:
sep = ''
data = file_name.split('.')
str_ver = data[0:-2]
ver = []
for i in str_ver:
if len(ver) < accuracy or accuracy == 0:
try:
if len(i)>1:
n = ''
for x in i:
try:
n+=str(int(x))
except:
pass
else:
n = str(int(i))
ver.append(n)
except:
pass
return sep.join(ver)
print get_version("httpd-2.2.31.tar.gz", 1, '--')
print get_version("httpd-2.2.31.tar.gz", 2, '::')
print get_version("httpd-2.2.31.tar.gz", 3, '_')
print get_version("httpd-2.2.31.tar.gz", 2)#what you were asking for
print get_version("httpd-2.2.31.tar.gz")
Просто добавьте еще один вариант, потому что это персональный фаворит: regex101.com тоже отличный. – idjaw
Это похоже на отличный сайт. –