我有一个具有特定兴趣行(例如第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)
我还不够好将该行中的第二个号码返回到一个新文件中 - 有人可以建议吗?
一如既往地感谢您的帮助!
答案 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']