首页 > 解决方案 > 在python中将诸如data0000172之类的数字重新格式化为172

问题描述

我有一个字符串列表。data0*(\d*)如果我们使用正则表达式形式,每个字符串都有形式。以下是字符串的示例:

data000000, data000003, data0172, data2312, data008212312

我只想取有意义的数字部分。所有数字都是整数。例如,在上述情况下,我想获得另一个列表,其中包含:

0, 3, 172, 2312, 8212312

在上述情况下,最好的方法是什么?

以下是我想到的解决方案:

import re

string_list = ["data0000172", ..... ]
number_list = []
for string in string_list:
   match = re.search("data0*(\d+)", string)
   if match:
      number_list.append(match.group(1))
   else:
      raise Exception("Wrong format.")

但是,上述方法可能效率低下。你能建议一个更好的方法来做到这一点吗?

标签: pythonregex

解决方案


如果您确定字符串以“数据”开头,您可以对字符串进行切片并转换为整数。前导零在那里不是问题。从零填充的数字字符串构建整数是可行的。

lst = ["data000000", "data000003", "data0172", "data2312", "data008212312"]

result = [int(x[4:]) for x in lst]

结果:

[0, 3, 172, 2312, 8212312]

或旧的替换以防万一前缀可以省略(但会稍微慢一些):

result = [int(x.replace("data","")) for x in lst]

推荐阅读