在python中将data0000172等数字重新格式化为172

cha*_*com 0 python regex

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

data000000, data000003, data0172, data2312, data008212312
Run Code Online (Sandbox Code Playgroud)

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

0, 3, 172, 2312, 8212312
Run Code Online (Sandbox Code Playgroud)

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

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

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.")
Run Code Online (Sandbox Code Playgroud)

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

Jea*_*bre 5

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

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

result = [int(x[4:]) for x in lst]
Run Code Online (Sandbox Code Playgroud)

结果:

[0, 3, 172, 2312, 8212312]
Run Code Online (Sandbox Code Playgroud)

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

result = [int(x.replace("data","")) for x in lst]
Run Code Online (Sandbox Code Playgroud)