如何从字符串中提取最大数字子字符串?

时间:2019-07-27 17:12:09

标签: python

当给出一个字符串时。如何在不使用正则表达式的情况下提取最大的数字子字符串?

例如,如果给定字符串:24some555rrr444

555将是最大的子字符串

def maximum(s1)
sub=[]
max=0
for x in s1
 if x.isnummeric() and  x>max
   sub.append(x)
 max=x

最大返回值

做什么才能使此代码起作用? 预先谢谢你!

4 个答案:

答案 0 :(得分:2)

将所有非数字替换为一个空格,根据空格拆分结果单词,将每个数字转换为int,然后找到其中的max

>>> s = '24some555rrr444'
>>> max(map(int, ''.join(c if c.isdigit() else ' ' for c in s).split()))
555

答案 1 :(得分:2)

您可以使用itertools.groupby分组提取数字并找到最大值:

from itertools import groupby

s = "24some555rrr444"

max(int(''.join(g)) for k, g in groupby(s, key=str.isdigit) if k)
# 555

答案 2 :(得分:0)

不使用正则表达式很奇怪,但是可以

s = "24some555rrr444"
n = len(s)

m = 0
for i in range(n):
    for len in range(i + 1, n + 1):
        try:
            v = int(s[i:len])
            m = v if v > m else m
        except:
            pass

print(m)

或者如果真的想将其压缩到基本上一行(转换功能除外),则可以使用

s = "24some555rrr444"
n = len(s)

def convert(s):
    try:
        return int(s)
    except:
        return -1

m = max(convert(s[i:l]) for i in range(n) for l in range(i + 1, n + 1))
print(m)

答案 3 :(得分:0)

为了保持您的心态,我建议这样做,它与最初的需求非常接近:

#Picked a random number+string stringchain                                                                                                 
OriginalStringChain="123245hjkh2313k313j23b"

#Creation of the list which will contain the numbers extracted from the formerly     chosen stringchain                                        
resultstable=[]

#The b variable will contain the extracted numbers as a string chain                                                                       
b=""

for i,j in zip(OriginalStringChain, range(len(OriginalStringChain))):

    c= j+1

    #the is.digit() fonction is your sql isnumeric equivalent in python                                                                    

    #this bloc of if will extract numbers one by one and concatenate them, if they are several in a row, in a string chain of numbers before adding them in the resultstable                                                                                                         

    if i.isdigit() == True:

        b+=i
        if j < len(OriginalStringChain)-1 and OriginalStringChain[c].isdigit() ==   False:

            resutstable.append(int(b))

        elif j== len(OriginalStringChain)-1 and OriginalStringChain[j].isdigit() == True:

            resultstable.append(int(b))
    else:

        b=""

print(resultstable)
#At the end, you just obtain a list where every values are the numbers we extracted previously and u just use the max function                                               
print(max(resultstable))

我希望我很清楚。
干杯