You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用findall无法精准提取多行文本指定行的问题

精准提取目标EARFCN行的正则表达式修改方案

问题场景

原始调试文本如下:

dbg = '''
HPLMN(424-03)  SIM_STATE(1)
SLOT 1 WITH DDS
SERVING PLMN(424-03) - LTE
SERVICE(AVAILABLE-2)
NW SEL: AUTO
ATT# 0, TAU# 0
EMM(REGISTERED-4) TAC(524)
LTE RRC: CONN BAND: 3
BW: 20.0MHZ
EARFCN: 1850, PCI: 445
R0 RSRP: -70, RSRQ: -6, SNR:34
R1 RSRP: -61, RSRQ :-6, SNR:34
RSRP:-61, RSRQ:-5, SNR:35
TX PWR: 1 DBM
PAGING_CYCLE: 640 MS
MOD(QAM): DL:256QAM, UL: -
CA ACTIVATED
(S1)BAND:20,BW:15.0MHZ
(S1)EARFCN:6375,PCI:445
(S1)RSRP:-60,RSRQ;-9,SNR:33
'''

需求是仅提取EARFCN: 1850, PCI: 445这一行,使用原正则表达式:

items=re.findall('^EARFCN.*',dbg,re.MULTILINE)

却返回了两行结果:

EARFCN: 1850, PCI: 445
(S1)EARFCN:6375,PCI:445

修改方案

正则表达式优化

将正则修改为精准匹配行首无前置字符的目标格式,基础版:

items = re.findall(r'^EARFCN: \d+, PCI: \d+$', dbg, re.MULTILINE)

如果需要兼容数字前后的空格,可使用更灵活的版本:

items = re.findall(r'^EARFCN:\s*\d+,\s*PCI:\s*\d+$', dbg, re.MULTILINE)

代码示例

import re

dbg = '''
HPLMN(424-03)  SIM_STATE(1)
SLOT 1 WITH DDS
SERVING PLMN(424-03) - LTE
SERVICE(AVAILABLE-2)
NW SEL: AUTO
ATT# 0, TAU# 0
EMM(REGISTERED-4) TAC(524)
LTE RRC: CONN BAND: 3
BW: 20.0MHZ
EARFCN: 1850, PCI: 445
R0 RSRP: -70, RSRQ: -6, SNR:34
R1 RSRP: -61, RSRQ :-6, SNR:34
RSRP:-61, RSRQ:-5, SNR:35
TX PWR: 1 DBM
PAGING_CYCLE: 640 MS
MOD(QAM): DL:256QAM, UL: -
CA ACTIVATED
(S1)BAND:20,BW:15.0MHZ
(S1)EARFCN:6375,PCI:445
(S1)RSRP:-60,RSRQ;-9,SNR:33
'''

# 精准提取目标行
items = re.findall(r'^EARFCN: \d+, PCI: \d+$', dbg, re.MULTILINE)
print(items)  # 输出: ['EARFCN: 1850, PCI: 445']

原理说明

  • ^ 在re.MULTILINE模式下匹配行首,确保只有行开头就是EARFCN的行被匹配,直接排除带(S1)前缀的行
  • \d+ 匹配数字内容,\s* 匹配任意数量的空格(可选,用于兼容格式差异)
  • $ 匹配行尾,确保整行符合目标格式,避免部分匹配的情况

内容的提问来源于stack exchange,提问作者Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:31:00