在一行中返回正则表达式搜索的第二个实例

时间:2014-09-18 13:26:05

标签: python regex readlines

我有一个具有特定兴趣行(例如第12行)的文件,如下所示:

conform: 244216 (packets) exceed: 267093 (packets)

我编写了一个脚本,通过正则表达式提取第一个数字并将值转储到新文件中:

getexceeds = open("file1.txt", "r").readlines()[12]
output = re.search(r"\d+", getexceeds).group(0)

with open("file2.txt", "w") as outp:
    outp.write(output)

我还不够好将该行中的第二个号码返回到一个新文件中 - 有人可以建议吗?

一如既往地感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

你几乎可以得到它;你的正则表达式只是在寻找第一场比赛。

match = re.search(r"(\d+).*?(\d+)", getexceeds)
firstNumber = match.group(1)
secondNumber = match.group(2)

请注意,正则表达式正在寻找两个捕获组(在parens中)两个数字序列。它们之间的关系是什么 - .*?意味着任何字符的最小数量。

这是我从shell跑出来的一个小测试:

>>> str = 'conform: 244216 (packets) exceed: 267093 (packets)'
>>> match = re.search(r"(\d+).*?(\d+)", str)
>>> print match.group(1)
244216
>>> print match.group(2)
267093

答案 1 :(得分:5)

另一种可能性是使用返回列表的re.findall():

>>>m = re.findall("\d+", strg) 
>>>m
['244216', '267093']