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

cap*_*ian 5 python regex readlines

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

conform: 244216 (packets) exceed: 267093 (packets)
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

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

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

Fro*_*its 8

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

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

请注意,正则表达式正在寻找两个捕获组(在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
Run Code Online (Sandbox Code Playgroud)


Rom*_*man 7

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

>>>m = re.findall("\d+", strg) 
>>>m
['244216', '267093']
Run Code Online (Sandbox Code Playgroud)