我可以从字符串的每一行中仅提取整数并将它们保存在列表中吗?

Kal*_*een 1 python string integer for-loop list

我有一个包含 3 行的字符串,如下所示。

\n
@ 544 000\n* 600 000\n\xe2\x80\x987000...\n
Run Code Online (Sandbox Code Playgroud)\n

我想将这些数字作为整数提取到列表中。

\n
Numbers = [544000, 600000, 7000]\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试过使用 for 循环来分割数据,如下所示。

\n
numbers = []    \nfor word in data.split():\n    if word.isdigit():\n        numbers.append(int(word))\nprint(numbers)\n
Run Code Online (Sandbox Code Playgroud)\n

但结果是

\n
[544, 0, 600, 0]\n
Run Code Online (Sandbox Code Playgroud)\n

我在这里的轨道正确吗,还是我需要以其他方式分割它?

\n

And*_*ely 6

您可以使用str.isdigit()+ str.join()(从行中提取每个字符并使用 进行检查str.isdigit()。然后使用 加入每个数字str.join()):

\n
s = """@ 544 000\n* 600 000\n\xe2\x80\x987000..."""\n\nfor line in s.splitlines():\n    print("".join(ch for ch in line if ch.isdigit()))\n
Run Code Online (Sandbox Code Playgroud)\n

印刷:

\n
544000\n600000\n7000\n
Run Code Online (Sandbox Code Playgroud)\n

或者作为列表:

\n
numbers = [\n    int("".join(ch for ch in line if ch.isdigit())) for line in s.splitlines()\n]\n
Run Code Online (Sandbox Code Playgroud)\n
\n

编辑:添加了对不包含数字的行的检查:

\n
numbers = [\n    int(m)\n    for line in s.splitlines()\n    if (m := "".join(ch for ch in line if ch.isdigit())).isnumeric()\n]\n
Run Code Online (Sandbox Code Playgroud)\n