使用python从包含多个数字的行中提取特定数字

时间:2017-11-15 10:26:07

标签: python python-2.7

由于我的行包含多个数字,但我只需提取前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']

但实际上我只需输出第1个7位数:

[4616542]
[4609974]

我不需要那些被分割的剩余号码

4 个答案:

答案 0 :(得分: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)。

答案 1 :(得分:0)

这是一个清单。如果您只需要第一项,那么您需要索引[0]

line=re.findall(r'\d{7}',item)[0]

答案 2 :(得分:0)

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)])

答案 3 :(得分:0)

  
    

findall()查找所有匹配项并将其作为列表返回     字符串,每个字符串代表一个匹配。

  
     

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进行第一场比赛:

  

一线解决方案:

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

输出:

['4616542', '4609974']