[英]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
中不同字母S
、 H
和E
后面的 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
我如何將這些單獨的整數1
、 7
、 5
、 1
、 0
和5
放回一起以形成代碼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.