从字符串中提取数字到列表中[重复]

Posted

技术标签:

【中文标题】从字符串中提取数字到列表中[重复]【英文标题】:Extract numbers from a string into a list [duplicate] 【发布时间】:2017-05-22 09:48:33 【问题描述】:

我想将字符串中的数字提取到列表中,但也包括其他字母。

例如:

a='a815e8ef951'

应该导致输出:

['a',815,'e',8,'f',951]

谢谢!

【问题讨论】:

指数符号呢,比如[1e8] 在此处发布之前,请在 Google 上搜索您的问题。 【参考方案1】:

您可以为此使用正则表达式和re

import re
matches = re.findall(r'(\d+|\D+)', 'a815e8ef951')
matches = [ int(x) if x.isdigit() else x for x in matches ]
# Output: ['a', 815, 'e', 8, 'ef', 951]

【讨论】:

没错。更新了列表扩展和isdigit 这是一个非常好的正则表达式答案。你很幸运,因为它只处理正数,否则很难让它适合 listcomp。也许你可以解释它是有效的,因为正则表达式默认是贪婪的。 同意:但我认为最好在处理额外的复杂性之前回答 OP。感谢您之前对 OP 问题的澄清。 不客气。你已经完成了困难的部分。【参考方案2】:

您主要使用 itertools.groupbylist comprehension 表达式为:

>>> from itertools import groupby, chain
>>> a='a815e8ef951'

>>> [''.join(s) for _, s in groupby(a, str.isalpha)]
['a', '815', 'e', '8', 'ef', '951']

如果还想将整型字符串转换为int,则必须将表达式修改为:

>>> [''.join(s) if i else int(''.join(s)) for i, s in groupby(a, str.isalpha)]
['a', 815, 'e', 8, 'ef', 951]

为了使最后一个表达式更简洁,您将if 部分移动到某个函数:

def tranform_string(to_int, my_list):
    my_string = ''.join(my_list)
    return int(my_string) if to_int else my_string

new_list = [tranform_string(i, s) for i, s in groupby(a, str.isdigit)]
#                                       using `isdigit()` here  ^

new_list 将保存所需内容的位置。

【讨论】:

好,但 OP 显然也需要转换为整数 groupby(a, lambda x: x.isalpha())groupby(a, str.isalpha) 相同 更新了答案 嗯,你还需要chain吗?这里没有效果。 @vaultah 你是完全正确的。我不知道为什么我首先想到使用它。可能是我当时在想一些完全不相关的事情。谢谢~

以上是关于从字符串中提取数字到列表中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从字符串中提取数字[重复]

从javascript中的字符串中提取数字[重复]

从python字符串中以简单的方式提取数字[重复]

如何从重复的字符串中提取单词

提取字符串中的数字[重复]

从没有任何空格的字符串中提取数字[重复]