关于python:将字符串中的数字提取到列表中

Extract numbers from a string into a list

本问题已经有最佳答案,请猛点这里访问。

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

例如:

1
a='a815e8ef951'

应导致输出:

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

谢谢!


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

1
2
3
4
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]


您主要使用itertools.groupby和列表理解表达式,如下所示:

1
2
3
4
5
>>> from itertools import groupby, chain
>>> a='a815e8ef951'

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

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

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

为了使最后一个表达式更清晰,您可以将if部分移动到某个函数,如下所示:

1
2
3
4
5
6
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将保存所需的内容。