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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python - 正则表达式将数值解析为没有星号和空格的数组相关的知识,希望对你有一定的参考价值。

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

数据集:

      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
另一答案

试试这个简单的正则表达式:

^s*(d+)D*(d+)

Click for Demo

Python code to extract the values

说明:

  • ^ - 断言线的起点
  • s* - 匹配0+出现的空白区域
  • (d+) - 匹配并捕获第1组中1位出现的数字
  • D* - 匹配任何非数字字符的0+次出现
  • (d+) - 匹配并捕获第2组中1位出现的数字

以上是关于python - 正则表达式将数值解析为没有星号和空格的数组的主要内容,如果未能解决你的问题,请参考以下文章

将正则表达式解析为 AST 的 Python 库?

正则表达式加与星号的区别? [复制]

正则表达式加与星号的区别? [复制]

我的Linux,我做主!通配符和正则表达式深层解析

使用正则表达式删除星号和空行

javascript 星号转义符