我有一个字符串列表。每个字符串都有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)
但是,上述方法可能效率低下。你能提出一个更好的方法来做到这一点吗?
如果您确定字符串以“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)