使用python从由多个数字组成的行中提取特定数字

2024-06-08 19:35:51 发布

您现在位置:Python中文网/ 问答频道 /正文

因为我是由几行数字组成的,但我只需要提取前6位数字

import re
out=['DOT/R9.4x                 4616542  rtpbuild   x. : 20171111184750 p4 p4burtd review','DOT/dex                 4609974  build      ~. : 20171108044757 p4 p4burtd review']
for item in out:
    line=re.findall(r'\d{7}',item)
    print(line)

我得到的输出是:

['4616542','2017111','1184750']
['4609974','2017110','8044757']

但实际上我只需要输出前7位数字:

[4616542]
[4609974]

我不需要剩下的被除数


Tags: inimportbuildreforline数字out
3条回答

如果要查找第一个匹配项,则应使用search而不是findall

for item in out:
    line=re.search(r'\b\d{7}\b',item)
    print(line.group(0))

注意,re.search返回一个SRE_Match对象。另一个选项是从findall返回的列表中提取第一个值

编辑:使用\b将避免匹配更大的数字(感谢@Jean)

import re
out=['DOT/R9.4x                 4616542  rtpbuild   x. : 20171111184750 p4 p4burtd review','DOT/dex                 4609974  build      ~. : 20171108044757 p4 p4burtd review']
for item in out:
    line=re.findall(r'\d{7}',item)[0]
    print([int(line)])

findall() finds all the matches and returns them as a list of strings, with each string representing one match.

findall()返回一个列表(列表是iterables)并返回str 物体。让我们检查一下:

import re
    out=['DOT/R9.4x                 4616542  rtpbuild   x. : 20171111184750 p4 p4burtd review','DOT/dex                 4609974  build      ~. : 20171108044757 p4 p4burtd review']
    for item in out:
        line=re.findall(r'\d{7}',item)
        for i in line:
            print(i)

输出:

4616542
2017111
1184750
4609974
2017110
8044757

因此,不要使用findall,而是使用re.search来搜索第一个匹配项:

One line solution:

print([re.search(r'\d{7}',item).group() for item in out])

输出:

['4616542', '4609974']

相关问题 更多 >