You need to enable JavaScript to run this app. 如何使用Python正则提取config firewall policy到end之间的指定内容
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python正则提取config firewall policy到end之间的指定内容

Python正则提取指定起止字符串间内容的解决方法

问题原因

原有正则存在两个核心问题:

  • 未限制end为行首字符,会匹配到文本中间出现的end子串(比如示例中uuid、接口名字段里的end),导致匹配提前终止
  • 未开启正则匹配的对应模式,无法精准识别行首标记和跨行内容

解决代码

import re

# 原始文本赋值
abovetext = """
config firewall policy
    edit 1
        set name "demo"
        set uuid demo
        set srcintf "demo-b-demo"
        set dstintf "demo"
        set srcaddr "demo.demo.demo.110" "host_10.demo.demo.129"
    next
    edit 2
        set name "demo rule"
        set uuid demo-c532-51eb-end-demo
        set srcintf "end-demo-demo"
        set dstintf "demo"
        set srcaddr "demo.40.demo.129" "demo.40.demo.110"
    next
end
config firewall policy
    edit 3
        set name "VIP-demo"
        set uuid demo-d428-end-demo-demo
        set srcintf "demo-b-inside"
        set dstintf "demo"
        set srcaddr "demo.demo.128.demo" "demo.demo.128.demo"
    next
end
"""

# 提取首个匹配段
match_res = re.search(r'config firewall policy\n(.*?)^end', abovetext, flags=re.DOTALL | re.MULTILINE)
if match_res:
    # 去除末尾多余换行后输出
    print(match_res.group(1).rstrip())

参数说明

  • re.DOTALL:让正则中的.可以匹配换行符,无需用[\s\S]这类替代写法实现跨行匹配
  • re.MULTILINE:让^匹配每一行的行首,而非仅匹配整个字符串的开头,可精准识别单独占行、行首为end的终止标记
  • 非贪婪匹配符.*?:保证匹配到第一个符合条件的终止标记就停止,不会继续向后匹配到后续段落的终止位置

如果需要提取所有符合规则的段落,将re.search替换为re.findall即可,返回结果为所有段落内容组成的列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 03:42:05