簡體   English   中英

從字符串中提取 2 位數字

[英]Extracting 2 digits numbers from string

我有一個包含字符串的文件,從我需要的每個字符串到 append 到我的列表每 2 位數字。 這是文件內容: https://pastebin.com/N6gHRaVA

我需要迭代每個字符串並檢查索引 [i] 和索引 [i+1] 上的字符串是否為數字,如果是,則 append 這些數字列出並從這 2 位數字中分割字符串,

例如字符串:

string = '7469NMPLWX8384RXXOORHKLYBTVVXKKSRWEITLOCWNHNOAQIXO' 應該以這種方式工作:

  1. 好的,我找到了數字 74,將 74 添加到我的列表中並將字符串從 74 分割到末尾
  2. 我的字符串現在是 69NMPLWX8384RXXOORHKLYBTVVXKKSRWEITLOCWNHNOAQIXO,我找到了數字 69,將 69 添加到列表中並將字符串切片,直到找到新的 2 位數字。 問題是我總是有錯誤:
        if string[i].isdigit() and string[i+1].isdigit():
                               ~~~~~~^^^^^
IndexError: string index out of range
f = open("file.txt")
read = f.read().split()
f.close()
for string in read:
    l = list()
    i = 0
    print(string)
    while i<len(string):
        if string[i].isdigit() and string[i+1].isdigit():
            l.append(string[i] + string[i+1])
            string = string[i+2:]
            i = 0
        else:
            i+=1

我的程序在第 31 行的字符串處停止,即字符串:'REDOHGMDPOXKFMHUDDOMLDYFAFYDLMODDUHMFKXOPDMGHODER5'

我不知道如何進行切片迭代,請不要使用正則表達式。

你要離開字符串的末尾......更改:

 while i<len(string):

到:

 while i<len(string)-1:

你應該沒事的。

如果您一次只看一個字符,則可以使用原來的while 這里的訣竅是你總是在看一個字符,而且總是在字符的“前面”。 所以你必須通過一次迭代來縮短你的檢查,以防止超過最后一個字符來檢查。

你的循環條件我 len(string)。 如果字符串不為空,則這等於一個正整數,被評估為 True。 因此,您創建了一個無限循環,當 i 變得大於字符串長度時,它就結束了。 嘗試這個:

while i < len(string) -1:

編輯:
顯然,我沒有注意到哪個字符串給了你錯誤。 當您檢查字符串的第 i+1 個元素時,當我們開始檢查最后一個字符時,到達下一個字符會出現明顯的錯誤。 所以,條件中應該有-1。

你可以使用遞歸 這是處理其中一個字符串的樣子。

部分代碼

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)    

OUTPUT:

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

你沒有停在正確的地方。 您可以將 while 循環更改為循環到

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM