正则表达式捕获日志中可变前置标识与指定数字间的字符串问题
解决日志内容兼容捕获问题
原来的正则只适配了日期时间后是四位数的情况,要兼容N/A的格式,只需修改正则里的前缀匹配规则,让它同时识别四位数和N/A两种情况就行。
修改后的代码如下:
import re # 测试两种格式的日志 test_strings = [ '2023-03-20 / 10:56:58 4737 Security-Enabled Global Group Modified 73 high SRVDC2 john.smi.admin 10.7.3.252 1', '2023-03-20 / 10:56:58 N/A Security-Enabled Global Group Modified 73 high SRVDC2 john.smi.admin 10.7.3.252 1' ] # 修改后的正则:用非捕获组匹配四位数或N/A,再匹配空格 pattern = r'(?<=(?:\d{4}|N/A) )(.*?)(?=\s\d{2}\s)' for s in test_strings: res = re.findall(pattern, s, re.MULTILINE) print(res)
修改说明
- 把原正则的
(?<=\d{4} )替换成(?<=(?:\d{4}|N/A) ),(?:...)是非捕获组,用来包裹两种可能的前缀(四位数或N/A),这样正则就能同时兼容两种格式的日志前缀。 - 其余逻辑保持不变,依然能精准捕获到两位数字前的目标内容。
内容的提问来源于stack exchange,提问作者OverflowStack
相关产品推荐
相关产品推荐

