正则表达式前后断言问题求助:无法捕获目标事件消息
问题解决
正则表达式修正
你的原正则未能匹配第二条消息,核心原因是预查条件没有精准定位到消息的起始位置(缺少对数字/-后空格的匹配),导致匹配范围出现偏差。根据给定规则,修正后的正则表达式如下:
import re text = """2023-04-05 / 15:53:58 104 Windows Event Logs Cleared 21 low SRVR3 - j.smith 1 2023-03-20 / 15:17:55 4738 Account Configured with Never-Expiring Password 47 medium DC02SRV - m.rossi 2""" # 修正后的正则:精准匹配3/4位数字或"-"后的空格,捕获到两位数字前的空格为止 pattern = r'(?<=\d{3,4} |- )(.*?)(?= \d{2} )' results = re.findall(pattern, text) print("\n".join(results))
运行结果会输出两条目标消息:
Windows Event Logs Cleared Account Configured with Never-Expiring Password
正则说明:
(?<=\d{3,4} |- ):正向预查,定位到3/4位数字后空格或**-后空格**的位置,确保消息起始位置准确。(.*?):非贪婪匹配任意字符,避免过度匹配到无关内容。(?= \d{2} ):正向预查,定位到两位数字前空格的位置,确保消息结束位置准确。
正则教程推荐
- Python官方文档正则部分:针对Python使用者,从基础语法到高级特性都有清晰讲解,搭配Python代码示例,实用性强。
- 《正则表达式必知必会》:薄册子一本,内容循序渐进,用简单易懂的例子讲解核心概念,适合入门和巩固基础。
- 离线练习工具:可以用Python自带的
re模块在本地shell里逐行测试正则,边写边验证,快速掌握匹配逻辑。
内容的提问来源于stack exchange,提问作者OverflowStack
相关产品推荐
相关产品推荐

