Как извлечь 0207 из l = string вместо 207? - PullRequest
3 голосов
/ 28 июня 2019

Пусть пользовательский ввод будет 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))

Ответы [ 4 ]

3 голосов
/ 28 июня 2019

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

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 (сравните элементы напрямую).

0 голосов
/ 30 июня 2019

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

import re

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

выход

0207
0 голосов
/ 28 июня 2019

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

0 голосов
/ 28 июня 2019
import re
a='0207a97'
a1=re.findall('(\d+)',a)
a1[0] #output - 0207
a1[1] #output - 97

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...