python-3.x - 在 Python 中使用正则表达式遍历文件内容并提取字段
问题描述
我想遍历一个文件并使用正则表达式仅提取特定数字并将这些数字存储在一个名为event_id
. 然后我想将数字与字典键进行比较,如果事件中有匹配项,程序将打印Matched ID: 1102
. 我走到这一步了。
但是我正在尝试提取该事件发生时的事件日期时间并将其存储在电梯中。所以屏幕打印输出应该是这样的:
Matched ID: 1102
Date and time of event: 2019-08-27 17:16:28.543879
Matched ID: 4611
Date and time of event: 2019-08-27 12:14:08.573156
我从中提取的文件数据如下所示:
<EventID Qualifiers="">1102</EventID>
<TimeCreated SystemTime="2019-08-27 17:16:28.543879"></TimeCreated>
<EventID Qualifiers="">4611</EventID>
<TimeCreated SystemTime="2019-08-27 17:16:28.543879"></TimeCreated>
这是我的代码:
evtxlogs = '/home/user/evtx_logs/'
event_id_regex = r'\W(\d*)\W/EventID\W'
event_date_regex = r'(\d.*.\d*)\D\W\W\W.imeCreated>'
event_id = []
event_date = []
eventdict = {'1102':{'count':0},'4611':{'count':0},'4624':{'count':0}}
for dirpath, dirnames, filenames in os.walk(evtxlogs):
for xml_file in filenames:
if xml_file.lower().endswith('.xml'):
with open(os.path.join(dirpath,xml_file), 'r') as f:
data = f.read()
event_id = re.findall(event_id_regex, data)
event_date = re.findall(event_date_regex, data)
for event_id in event_id:
if event_id in eventdict:
print(f"Matched ID: {event_id}")
print(f"Date and time of event: {event_date}")
解决方案
如果您有一个 XML 文件,那么最好按照预期使用它来获取您所需要的信息,因为处理可能会更快并且代码更健壮。有关使用 python 解析 XML 的简单演示,请参阅此答案。
但是,单独回答提供的信息;假设您所追求的两个元素彼此相邻,您可以简单地扩展您的模式以TimeCreated
使用组来捕获和提取您的值,如下所示:
import re
regex = r"^<EventID Qualifiers=\"\">(\d+)</EventID>$.^<TimeCreated SystemTime=\"(.+?)\""
test_str = ("<EventID Qualifiers=\"\">1102</EventID>\n"
"<TimeCreated SystemTime=\"2019-08-27 17:16:28.543879\"></TimeCreated>\n\n"
"<EventID Qualifiers=\"\">4611</EventID>\n"
"<TimeCreated SystemTime=\"2019-08-27 17:16:28.543879\"></TimeCreated>")
matches = re.finditer(regex, test_str, re.MULTILINE | re.DOTALL)
for matchNum, match in enumerate(matches, start=1):
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
group = match.group(groupNum)
print (f"Group {groupNum}: {group}")
输出:
Group 1: 1102
Group 2: 2019-08-27 17:16:28.543879
Group 1: 4611
Group 2: 2019-08-27 17:16:28.543879
推荐阅读
- sqlite - recyclerview sqlite 数据库,recyclerview 上删除的数据但数据库中没有删除
- typescript - 无法从 Nuxt 中的另一个模块导入模块
- reactjs - 错误“提供给 Commerce.js 客户端的公钥无效”
- powerbi - PowerBI 日期列 - 1 年,具有静态日期
- sql - 语句Oracle Sql中where子句中的空值
- cocos2d-iphone - Cocos Creator 中的加速度计
- python - 根据场地能力和部门能力安排工作时间
- reactjs - 使用 Capacitorjs 和 ReactJS 录制视频
- spring-boot - 变量表达式无法从控制器获取模型对象数据
- date - 日期中的高、低、高/淡季公式