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+)
Python code to extract the values
说明:
^
- 断言线的起点s*
- 匹配0+出现的空白区域(d+)
- 匹配并捕获第1组中1位出现的数字D*
- 匹配任何非数字字符的0+次出现(d+)
- 匹配并捕获第2组中1位出现的数字
以上是关于python - 正则表达式将数值解析为没有星号和空格的数组的主要内容,如果未能解决你的问题,请参考以下文章