首页 > 解决方案 > Python 正则表达式捕获跨越多行的多个匹配项

问题描述

我正在尝试提取 adb 输出的数据块,这些数据块使用 python 跨越多行re

示例数据为:

* ReceiverList{ac5847f 494 system/1000/u-1 local:ecc819e}
app=494:system/1000 pid=494 uid=1000 user=-1
Filter #0: BroadcastFilter{db24c4c}
Action: "android.app.action.DEVICE_POLICY_MANAGER_STATE_CHANGED"
Action: "android.intent.action.USER_PRESENT"
Action: "android.intent.action.USER_ADDED"
Action: "android.intent.action.USER_REMOVED"
AutoVerify=false
* ReceiverList{d0a75c1 494 system/1000/u-1 local:22946a8}
app=494:system/1000 pid=494 uid=1000 user=-1
Filter #0: BroadcastFilter{19b2166}
Action: "android.intent.action.USER_ADDED"
Action: "android.intent.action.USER_REMOVED"
AutoVerify=false
Filter #1: BroadcastFilter{e1e7ca7}
Action: "android.intent.action.PACKAGE_ADDED"
Action: "android.intent.action.PACKAGE_REMOVED"
Scheme: "package"
AutoVerify=false
* ReceiverList{4b668d3 691 com.android.systemui/10016/u0 remote:523b2c2}
app=691:com.android.systemui/u0a16 pid=691 uid=10016 user=0
Filter #0: BroadcastFilter{bcd1c10}
Action: "android.media.VOLUME_CHANGED_ACTION"
Action: "android.media.STREAM_DEVICES_CHANGED_ACTION"
Action: "android.media.RINGER_MODE_CHANGED"
Action: "android.media.INTERNAL_RINGER_MODE_CHANGED_ACTION"
Action: "android.media.STREAM_MUTE_CHANGED_ACTION"
Action: "android.os.action.ACTION_EFFECTS_SUPPRESSOR_CHANGED"
Action: "android.intent.action.CONFIGURATION_CHANGED"
Action: "android.intent.action.SCREEN_OFF"
Action: "android.intent.action.CLOSE_SYSTEM_DIALOGS"
AutoVerify=false
...

我试图提取* ReceiverList...以最后一个开头和结尾的每组数据AutoVerify=false。一些数据集有多个AutoVerify=false. 最终输出应反映[*ReceiverList...AutoVerify... , *ReceiverList...Autoverify...]

到目前为止,我尝试过的一些事情是:

请注意,在示例数据集中,有两个AutoVerify=false. 在第二组中,我想包括所有数据,直到下一次* ReceiverList开始。

标签: pythonregex

解决方案


使用split前瞻分割换行符\* ReceiverList

re.compile("\r?\n(?=\* ReceiverList)").split(s)

推荐阅读