在单个传递上操作Python的re.split /类似内置的所有匹配

时间:2015-06-23 12:04:47

标签: python regex

如果我有一个类似'level1-4car10'的字符串,我想在列表中提取所有这些数字(特别是整数)作为数字。

当我跑步时,

re.split(r'(\d+)', 'level1-4car10')

那是一半的工作,给我一个结果,

['level', '1', '-', '4', 'car', '10', '']

但我正在寻找的是,

['level', 1, '-', 4, 'car', 10, '']

1,4和10现在是真正的整数,而不是数字。目前,使用re.split进行捕获,我将不得不通过返回的列表来执行此操作,我只是想知道是否有任何其他选项可用于以更多一次通过的方式执行此操作,就像key的{​​{1}}部分一样。

编辑:我重写了这个问题,特别是陈述sorted

这也与Python: Extract numbers from a string的答案不同,因为我不仅仅想要数字,我希望列表中的数字和single pass按照它们在句子中的显示方式排序。< / p>

3 个答案:

答案 0 :(得分:3)

您可以使用地图

map(lambda x: int(x) if x.isdigit() else x, re.split(r'(\d+)', 'level1-4car10'))

答案 1 :(得分:2)

[int(i) if i.isdigit() else i for i in re.split(r'(\d+)', 'level1-4car10')]

答案 2 :(得分:1)

我不知道任何一种传递方式,但您可以使用list comprehension在一行中填写这个例子 -

newlist = [int(x) if x.isdigit() else x for x in re.split(r'(\d+)', 'level1-4car10') if x != '']
>>> newlist
['level', 1, '-', 4, 'car', 10]

如果你想保留空字符串 -

newlist = [int(x) if x.isdigit() else x for x in re.split(r'(\d+)', 'level1-4car10')]
>>> newlist
['level', 1, '-', 4, 'car', 10, '']