Skip to main content
 首页 » 编程设计

python之正则表达式将数值解析为没有星号和空格的数组

2024年09月03日31cyq1162

我有下面的示例数据,我想提取前两列数字并将它们放入一个数组中。

数据集:

      54     1%    2.11 MB  52 min       0.0    49.0    0.0  test1 test1_4.1.6_Win_x86_install_en-US.tar 
      55    17%   31.89 MB  1 min        0.0  1263.0    0.0  test344 base-2.10.6-x86_64.dmg 
      56    17%   31.18 MB  1 min        0.0  1267.0    0.0  test2 base-2.10.4-x86_64.dmg 
      57    15%   27.12 MB  2 min        0.0  1066.0    0.0  test23 base-2.10.6-setup.exe 
      58    20%   32.16 MB  1 min        0.0  1196.0    0.0  test232 base-2.10.8-x86_64-2.dmg 
      59*    0%       None  599 days     0.0     0.0    0.0  test12 base.1.2_Linux_x86_deb.tar.gz 
      60    14%   26.31 MB  2 min        0.0  1243.0    0.0  test23 base-2.10.4-setup-2.exe 
      61     0%       None  Unknown      0.0     0.0   None  Idle base-0.9.24.1.exe 
    Sum:          150.8 MB               0.0  6084.0 

当前结果:

    54     1 
    55    17 
    56    17 
    57    15 
    58    20 
    60    14 

期望的结果:

    54     1 
    55    17 
    56    17 
    57    15 
    58    20 
    59    0 
    60    14 
    61     0 

问题:

缺少 id 59 和 0

虽然我已经得到它来捕获前两列。我似乎无法用星号捕获该列

我正在尝试了解如何改进正则表达式的“\s+”部分以包含数字并排除星号。

代码:

    import re 
 
    output4a = """ 
      54     1%    2.11 MB  52 min       0.0    49.0    0.0  test1 test1_4.1.6_Win_x86_install_en-US.tar 
      55    17%   31.89 MB  1 min        0.0  1263.0    0.0  test344 base-2.10.6-x86_64.dmg 
      56    17%   31.18 MB  1 min        0.0  1267.0    0.0  test2 base-2.10.4-x86_64.dmg 
      57    15%   27.12 MB  2 min        0.0  1066.0    0.0  test23 base-2.10.6-setup.exe 
      58    20%   32.16 MB  1 min        0.0  1196.0    0.0  test232 base-2.10.8-x86_64-2.dmg 
      59*    0%       None  599 days     0.0     0.0    0.0  test12 base.1.2_Linux_x86_deb.tar.gz 
      60    14%   26.31 MB  2 min        0.0  1243.0    0.0  test23 base-2.10.4-setup-2.exe 
      61     0%       None  Unknown      0.0     0.0   None  Idle base-0.9.24.1.exe 
    Sum:          150.8 MB               0.0  6084.0""" 
 
    idPercentage3 = re.findall(r'^\s+([0-9]+)\s+([0-9]+)', output4a, flags=re.MULTILINE) 
    print (idPercentage3) 

谢谢

请您参考如下方法:

我建议使用 ^\s*(\d+)\*?\s+(\d+),这使得文字 * 字符对于 是可选的?。我也让你的第一次太空运行成为可选的;允许数字在没有填充的情况下与行的开头对齐似乎是合理的(但如果您愿意,可以将 * 更改回 + )。最后,\d 等同于 [0-9]。

完整代码:

import re 
 
output4a = """ 
  54     1%    2.11 MB  52 min       0.0    49.0    0.0  test1 test1_4.1.6_Win_x86_install_en-US.tar 
  55    17%   31.89 MB  1 min        0.0  1263.0    0.0  test344 base-2.10.6-x86_64.dmg 
  56    17%   31.18 MB  1 min        0.0  1267.0    0.0  test2 base-2.10.4-x86_64.dmg 
  57    15%   27.12 MB  2 min        0.0  1066.0    0.0  test23 base-2.10.6-setup.exe 
  58    20%   32.16 MB  1 min        0.0  1196.0    0.0  test232 base-2.10.8-x86_64-2.dmg 
  59*    0%       None  599 days     0.0     0.0    0.0  test12 base.1.2_Linux_x86_deb.tar.gz 
  60    14%   26.31 MB  2 min        0.0  1243.0    0.0  test23 base-2.10.4-setup-2.exe 
  61     0%       None  Unknown      0.0     0.0   None  Idle base-0.9.24.1.exe 
Sum:          150.8 MB               0.0  6084.0""" 
 
id_percentage3 = re.findall( 
    r'^\s*(\d+)\*?\s+(\d+)',  
    output4a, flags=re.MULTILINE 
) 
 
for a, b in id_percentage3: 
    print(a, b) 

输出:

54 1 
55 17 
56 17 
57 15 
58 20 
59 0 
60 14 
61 0