首页 > 解决方案 > 如何从 l=string 中提取 0207 而不是 207?

问题描述

让用户输入为 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))

标签: pythonregex

解决方案


您可以使用

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参数 with 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(直接比较元素)。


推荐阅读