将字符串中的数字提取到列表中

时间:2017-01-07 20:02:55

标签: python

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

例如:

a='a815e8ef951'

应该导致输出:

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

谢谢!

2 个答案:

答案 0 :(得分:8)

您可以使用正则表达式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]

答案 1 :(得分:3)

您主要使用itertools.groupby以及列表理解表达式:

>>> 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将包含所需内容。