簡體   English   中英

從字符串中提取整數並從這些整數的列表中形成實際數字

[英]Extracting integers from a string and forming actual numbers from a list of these integers

我有一個字符串bar

bar = 'S17H10E7S5E3H2S105H90E15'

我采用這個字符串並形成以字母S開頭的組:

groups = ['S' + elem for elem in bar.split('S') if elem != '']
groups
['S17H10E7', 'S5H3E2', 'S105H90E15']

在不使用迷你語言 RegEx 的情況下,我希望能夠獲得這些groups中不同字母SHE后面的 integer 值。 為此,我正在使用:

code = 'S'
temp_num = []

for elem in groups:
    start = elem.find(code)
    for char in elem[start + 1: ]:
        if not char.isdigit():
            break
        else:
            temp_num.append(char)
            num_tests = ','.join(temp_num)

這給了我:

print(groups)
['S17H10E7', 'S5H3E2', 'S105H90E15']

print(temp_num)
['1', '7', '5', '1', '0', '5']

print(num_tests)
1,7,5,1,0,5

我如何將這些單獨的整數175105放回一起以形成代碼S后面的數字列表? 例如:

[17, 5, 105]

更新

除了已接受的答案外,還有另一種解決方案:

def count_numbers_after_code(string_to_read, code):
    
    index_values = [i for i, char in enumerate(string_to_read) if char == code]
    
    temp_1 = []    
    temp_2 = []
   
    for idx in index_values:
        temp_number = []
        for character in string_to_read[idx + 1: ]:
            if not character.isdigit():
                break
            else:
                temp_number.append(character)

            temp_1 = ''.join(temp_number)
        temp_2.append(int(temp_1))
    
    return sum(temp_2)

這樣的事情行得通嗎?

def get_numbers_after_letter(letter, bar):
    current = True
    out = []
    for x in bar:
        if x==letter:
            out.append('')
            current = True
        elif x.isnumeric() and current:
            out[-1] += x
        elif x.isalpha() and x!=letter:
            current = False
    return list(map(int, out))

Output:

>>> get_numbers_after_letter('S', bar)
[17, 5, 105]

>>> get_numbers_after_letter('H', bar)
[10, 3, 90]

>>> get_numbers_after_letter('E', bar)
[7, 2, 15]

我認為最好在每個字母之后都獲取所有數字,因為無論如何我們都會傳遞字符串,但如果您不想這樣做,我想這可能會奏效。

該問題指出您會贊成不使用正則表達式的解決方案(評論中的“除非絕對必要”)

這當然不是必需的,但作為未來讀者的替代方案,您可以匹配S並在將由 re.findall 返回的組中使用(\d+)捕獲 1 個或多個數字。

import re

bar = 'S17H10E7S5E3H2S105H90E15'
print(re.findall(r"S(\d+)", bar))

Output

['17', '5', '105']

暫無
暫無

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

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