python - 从多行文件中获取特定文本
问题描述
考虑到文本文件有多个换行符和空格,我想在 python 中使用 Regex 包从文件中过滤特定文本。该文件可能有多个数据块,但唯一需要的是具有特定关键字的数据块。在我的问题中,它应该属于一个包含“Route-Details”关键字的组。
假设文件(sample.txt)如下所示。
.
.
.
Host1<-->Host2 Con. ID: 0x0fc2f0d9 (abc123)
Con. Information:
[Gw] Route-Details
R-Code: 0xaaaa (1a2) Route-Details
Router-ID: 0x21 (a4) [Gw]
Path-Code: 0x00e (15)
Data: 123-abcd.djsjdkks www.somesite. port 11
Coded info
aa aa aa aa aa aa aa aa 1111-aaa
aa aa aa aa aa aa aa aa 1111-aaa
.
.
.
这是我写的
import re
with open("sample.txt", "r") as fl:
in_file= fl.read()
(re.search('(?<=Route-Details).* Data:', in_file,re.DOTALL).group())
我希望得到这个。
123-abcd.djsjdkks www.somesite. port 11
然而,我得到了这个。
R-Code: 0xaaaa (1a2) Route-Details
Router-ID: 0x21 (a4) [Gw]
Path-Code: 0x00e (15)
Data:
我想知道我是否可以为此获得简化和详细的解决方案。非常感谢你的帮助。
解决方案
您可以使用积极的后视和捕获组:
re.findall(r'(?<=Data: )(.*?)\n', text)
产量:
['123-abcd.djsjdkks www.somesite. port 11']
此外,您可以尝试以下方法来包含Route-Details
您指定的条件:
re.findall(r'(?<=Route-Details).*?(?<=Data: )(.*?)\n', text, re.DOTALL)
有关详细说明,请参见此处。此外,re.DOTALL
指定该.
字符将匹配所有字符,包括换行符。
推荐阅读
- sql - 标记 SQL Oracle 开发人员最佳实践
- laravel - 无法在 Laravel 中广播通知
- amazon-web-services - 如何使用带有 curl 命令的 kubectl 在 Couchbase 中创建存储桶并将数据插入其中。?
- android-studio - 我可以像这张照片那样运行我的模拟器手册吗?
- java - 在 Glasspane 前面显示 InternalFrame
- node.js - 对 node.js 进行更改后,LocalHost 未加载我在 Windows 的 linux 子系统上运行命令
- javascript - 如何确定点击事件是否是由提交带有“enter”的表单引起的?
- c# - 是否可以从派生类型引用中定义泛型类型?
- sql - 如果不存在,则在 Postgresql 中使用锁创建索引
- iframe - Grafana Cloud - 匿名访问 - 嵌入 iframe