由于我的行包含多个数字,但我只需提取前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]
我不需要那些被分割的剩余号码
答案 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']