Вы можете использовать
import re
s = "0207a97"
l = [(int(i), i) for i in re.findall('\d+',s) if '9' not in i]
if len(l)>0:
print(max(l, key=lambda x: x[0])[1]) # => 0207
См. Демоверсию Python . Таким образом, получить список кортежей с первым элементом в качестве целочисленного значения и вторым элементом в качестве совпадающего строкового значения, затем получить максимальное значение, сравнивающее только первые элементы, и напечатать элемент 2 из найденного кортежа.
Или, вы все равно можете просто получить результирующий список re.findall(r'\d+', s)
и использовать аргумент key
с max
. Установите его на int
, и значения в списке будут сравниваться как целые числа:
l = [i for i in re.findall('\d+',s) if '9' not in i]
if len(l)>0:
print(max(l, key=int))
См. еще одну демонстрацию Python . Из документов :
ключ указывает функцию одного аргумента, которая используется для извлечения ключа сравнения из каждого элемента в итерируемой (например, key=str.lower
). Значение по умолчанию None
(сравните элементы напрямую).