如何使用正则表达式从日志文件中分离时间戳和表达式



我有一个日志文件,看起来像这样:

04:26:24.664149[PHY1] [I] [4198] PUCCH: cc=0;rnti=0x46, f=1a, n_pucch=12, dmrs_corr=0.995,snr=13.2dB, corr=0.974, ack=1, ta=0.1 us

04:26:24.665067 [PHY0] [D][4199]工人0运行

04:26:24.665166 [PHY0] [D][4199]发送到无线电

04:26:24.666220[PHY1] [I] [4200] PUCCH: cc=0;rnti = 0 x46 f = 1, n_pucch = 0, dmrs_corr = 0.270信噪比= -4.3dB, corr=0.000, sr=no, ta=-9.0 us

04:26:24.666288 [PHY1] [D][4200]发送到无线电

04:26:24.667305[PHY0] [I] [4201] PUCCH: cc=0;rnti = 0 x46 f = 2, n_pucch = 0, dmrs_corr = 0.989信噪比= 15.4dB, corr=0.998, cqi=15 (cc=0), ta=0.2 us

04:26:24.667338 [MAC] [D] [4201] ra_tbs=72/144, tbs_bytes=15, tbs=144, mcs=2

我想隔离有snr={value}条目的行,并复制与该条目相关的时间戳。我把加粗我想用正则表达式提取的部分示例。

我尝试了许多不同的正则表达式,试图从我的日志文件中提取这两位信息(在它们存在的行上)。重要的是要注意信噪比取值为正或负,取值范围为-999.9 dB到999.9 dB。时间戳出现在日志文件的每一行。

我期望输出的一个例子是:04:26:24.664149 snr=13.2

任何帮助都将非常感激!

这是使用re.findall的一种方法:

inp = """04:26:24.664149 [PHY1   ] [I] [ 4198] PUCCH: cc=0; rnti=0x46, f=1a, n_pucch=12, dmrs_corr=0.995, **snr=13.2** dB, corr=0.974, ack=1, ta=0.1 us
04:26:24.665067 [PHY0   ] [D] [ 4199] Worker 0 running
04:26:24.665166 [PHY0   ] [D] [ 4199] Sending to radio
04:26:24.666220 [PHY1   ] [I] [ 4200] PUCCH: cc=0; rnti=0x46, f=1, n_pucch=0, dmrs_corr=0.270, **snr=-4.3** dB, corr=0.000, sr=no, ta=-9.0 us
04:26:24.666288 [PHY1   ] [D] [ 4200] Sending to radio"""
matches = re.findall("(d{2}:d{2}:d{2}.d{6})[^rn]*(snr=-?d+(?:.d+)?)", inp)
print(matches)

这个打印:

[('04:26:24.664149', 'snr=13.2'), ('04:26:24.666220', 'snr=-4.3')]

最新更新