查找数字的所有最大子字符串

2024-10-06 11:27:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要写一个程序来找到所有最大的数字子串。 仅返回按顺序由空格分隔的这些子字符串。 不要使用正则表达式,这只是编程语言最简单的功能

34234 34 dfd gfd 5

34535

fsdflskfjsdflk

fsdkfj sdf34fdfd

1,3

1/5

应提供以下信息:

34234 34 5

34535

34

1 3

1 5

但在最后两次输出中,我得到的是13和15,而不是13和15。所以,如果有像x.x或x,x或x/x这样的数字,它应该给出它们之间的数字和空格。你知道怎么做到吗?我的代码在下面

for linia in plik:
linia = linia.strip("\n")

i=0
current_string = ''

for i in range(len(linia)):
    if linia[i].isdigit() or (linia[i-1].isdigit() and linia[i].isspace()) :
        current_string+=linia[i]
        i+=1

if(current_string!=''):
    print(current_string)

Tags: 字符串in程序功能forstringif顺序
2条回答

这里有几个问题。最明显的一点是,在原始字符串中不存在空格的情况下,代码不包含任何添加空格的方法。您希望1/5给出1 5,但这是不可能的,因为您从未尝试写入空格字符

通过使用索引,您还引入了一个可能的错误,即linea[i-1]i=0表示字符串的最后一个字母时linea[-1]

使用简单的for循环、list和join方法提供了一个方便易读的选项:

plik = [
"34234 34 dfd gfd 5",
"34535",
"fsdflskfjsdflk",
"fsdkfj sdf34fdfd",
"1,3",
"1/5"]

for linia in plik:
    linia = linia.strip("\n")

    current_string = ''
    output = []

    for x in linia:
        if x.isdigit():
            current_string += x
        elif not current_string == '':
            output.append(current_string)
            current_string = ''

    if not current_string == '':
        output.append(current_string)

    if output:
        print(' '.join(output))

您可以使用标志检查非数字间隙。为每个间隙写一个空格

请尝试以下代码:

plik = [
"34234 34 dfd gfd 5",
"34535",
"fsdflskfjsdflk",
"fsdkfj sdf34fdfd",
"1,3",
"1/5"]

for linia in plik:
    linia = linia.strip("\n")

    i=0
    current_string = ''

    gap = False
    for i in range(len(linia)):
        if linia[i].isdigit() :
            if gap : current_string+=' '
            current_string+=linia[i]
            i+=1
            gap = False
        elif len(current_string):
            gap = True

    if(current_string!=''):
        print(current_string)

输出

34234 34 5
34535
34
1 3
1 5

相关问题 更多 >