从具有连续数字字符的字符串中提取数字

Extract digits from string with consecutive digit characters

我不能使用正则表达式或库 :(。我需要从字母数字字符串中提取所有数字。每个连续的数字序列(我们可以称之为“温度”)都被 (+、- 或 * ) 并且会被认为是一个数字(都是整数,没有浮点数)。字符串中还有其他非数字字符可以忽略。我需要将每个“温度”提取到数据结构中。

示例字符串“BARN21+77-48CDAIRY87+56-12”产生 [21, 77, 48, 87, 56, 12]

数据字符串可以大很多数量级。

我能找到的所有解决方案都假设字符串中只有 1 个数字序列 (temperature),或者 (temperatures) 由 space/delimiter 分隔。我能够通过遍历字符串并在每个数字序列前后添加 space 然后使用 split 来开始工作,但这感觉就像作弊。我想知道你们专业人士是否为了快乐的解决方案而扭曲数据?

传入数据“BARN21+77-48CDAIRY87+56-12” temp 是我将数据更改为

temp = "BARN* 21 + 77 - 48 DAIRY* 87 + 56 - 12"
result = [int(i)
for i in temp.split()
    if i.isdigit()]
    print("The result ", result)

结果[21, 77, 48, 87, 56, 12]

这是一个不使用正则表达式的版本:

inp = "BARN21+77-48CDAIRY87+56-12"
inp = ''.join(' ' if not ch.isdigit() else ch for ch in inp).strip()
nums = inp.split()
print(nums)  # ['21', '77', '48', '87', '56', '12']

如果您可以使用正则表达式,我们可以使用 re.findall 和正则表达式模式 \d+:

inp = "BARN21+77-48CDAIRY87+56-12"
nums = re.findall(r'\d+', inp)
print(nums)  # ['21', '77', '48', '87', '56', '12']