Пусть пользовательский ввод будет 0207a97, с использованием re 207 извлекается из списка вместо 0207

str = input()
l = [int(i) for i in re.findall('\d+',str) if '9' not in i]

if len(l)>0:
    print(max(l))
3
Ayush Lal 28 Июн 2019 в 14:35

4 ответа

Лучший ответ

Вы можете использовать

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 указывает функцию с одним аргументом, которая используется для извлечения ключа сравнения из каждого элемента в iterable (например, key=str.lower). Значением по умолчанию является None (сравните элементы напрямую).

3
Wiktor Stribiżew 29 Июн 2019 в 20:48
import re
a='0207a97'
a1=re.findall('(\d+)',a)
a1[0] #output - 0207
a1[1] #output - 97

Это даст вам вывод в виде списка. Вы можете изменить список по своему желанию.

-1
aniket bauskar 28 Июн 2019 в 11:46

Если бы мы записывали в наши строки не девять начальных цифр, возможно, это просто вернуло бы это:

import re

print(re.match("^([0-8]+)", "0207a97").group(1))

Выход

0207
0
Emma 29 Июн 2019 в 21:09

Вы можете добавить начальные нули, как только вы печатаете его на экране. Вы можете прочитать это для лучшего пояснения: https://stackoverflow.com/a/13499182

0
hsen 28 Июн 2019 в 11:47