python 从字符串中提取两位数字

x4shl7ld  于 2022-11-28  发布在  Python
关注(0)|答案(4)|浏览(361)

我有一个包含字符串的文件,从每个字符串我需要附加到我的列表每个2位数。下面是文件内容:https://pastebin.com/N6gHRaVA
我需要迭代每个字符串并检查索引[i]和索引[i+1]上的字符串是否为数字,如果是,则将这些数字添加到列表中,并将字符串从这2位数字中切片,
例如字符串:
字符串= '7469NMPLWX8384RXXOORHKLYBTVVXKKSRWEITLOCWNHNOAQIXO'应按以下方式工作:
1.好了,我找到了数字74,把74加到我的列表中,然后把字符串从74切到最后
1.我的字符串现在是69NMPLWX8384RXXOORHKLYBTVVXKKSRWEITLOCWNHNOAQIXO,我找到了数字69,将69添加到列表中,并对字符串进行切片,直到我找到新的两位数数字。问题是我总是出错:
第一个
我的程序在第31行的string处停止,它是一个字符串:'恢复轴承座紧固件型号'
我不知道如何做这个切片迭代,请不要使用正则表达式。

ewm0tg9j

ewm0tg9j1#

你要离开弦的末端了......改变:

while i<len(string):

至:

while i<len(string)-1:

你应该没事的。
如果你每次只查看一个字符,你可以使用原来的while。这里的技巧是你总是查看一个字符,而且是“一个字符之前”的字符。所以你必须缩短一次迭代,以防止超过最后一个字符进行检查。

qlvxas9a

qlvxas9a2#

你可以使用递归。下面是处理一个字符串的方法。

部分代码

my_string = '7469NMPLWX8384RXXOORHKLYBTVVXKKSRWEITLOCWNHNOAQIXO'
result_list = []

def read_string(s):
    result = ""
    for i,j in enumerate(s):
        if i>0 and s[i-1].isdigit() and s[i].isdigit():
            result = s[i-1] + s[i]
            result_list.append(result)
            read_string(s[i+1:])
            break;
            
    return (result_list)        
     
# Call the read_string function
x = read_string(my_string) 
print(x)

输出:

['74', '69', '83', '84']
nx7onnlm

nx7onnlm3#

你的循环条件i len(string)。如果string不为空,这等于一个正的intiger,它被求值为True。因此,你创建了一个无限循环,当i大于string长度时,它就结束了。试试这个:
while i < len(string) -1:
编辑日期:
显然,我没有注意到哪个字符串给了你错误。当你检查字符串的第i+1个元素时,当我们星星检查最后一个字符时,到达下一个字符时会给你一个明显的错误。所以,条件中应该有-1。

wr98u20j

wr98u20j4#

您没有停在正确的位置。您可以将while循环更改为loop to

while I < len(string) - 1:

如果我可以建议一个稍微干净一点的方法,请看下面。

f = open("file.txt")
read = f.read().split()
f.close()
for string in read:
    l = list()
    i = 0
    print(string)
    while i < len(string) - 1:
        numCheck = i + 1 # You call it more than once. Set to var
        ltr = string[i] + string[numCheck] # no need to call this multiple times, just set to a var
        if ltr.isdigit():
            l.append(ltr)
            string = string[numCheck:]
            i = 0
        else:
            i += 1
        
print(l)

我把你的while循环改成了上面的,然后把你多次调用的值放到一个变量中。而且因为你的列表是在for循环中初始化的,所以你只保留了最后一个字符串中的数字。如果你想要一个包含所有数字的列表,只要把它移出来就行了。就像这样,

f = open("file.txt")
read = f.read().split()
f.close()
l = list()
for string in read:
    i = 0
    print(string)
    while i < len(string) - 1:
        numCheck = i + 1 # You call it more than once. Set to var
        ltr = string[i] + string[numCheck] # no need to call this multiple times, just set to a var
        if ltr.isdigit():
            l.append(ltr)
            string = string[numCheck:]
            i = 0
        else:
            i += 1
        
print(l)

相关问题