[英]python regex - extracting digits from string with numbers and characters
[英]Extracting 2 digits numbers from string
我有一個包含字符串的文件,從我需要的每個字符串到 append 到我的列表每 2 位數字。 這是文件內容: https://pastebin.com/N6gHRaVA
我需要迭代每個字符串並檢查索引 [i] 和索引 [i+1] 上的字符串是否為數字,如果是,則 append 這些數字列出並從這 2 位數字中分割字符串,
例如字符串:
string = '7469NMPLWX8384RXXOORHKLYBTVVXKKSRWEITLOCWNHNOAQIXO' 應該以這種方式工作:
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.