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

如何使用Python的Lark解析带--->标记的文本段落

问题分析与修复方案

你的解析器未识别出section的核心问题有三点:

  1. start规则采用section* | line*的歧义分支,Lark会优先尝试匹配line*(因你的section规则仅匹配标题行和后续两个换行,无法覆盖完整section结构,导致解析器 fallback 到line*分支)
  2. section规则仅定义了标题行,未包含该section对应的内容部分
  3. 内容匹配规则未排除新的section起始行,无法正确划分section边界

修正后的语法与代码

from lark import Lark

parser = Lark(r"""
    start: section*

    section: section_header content
    section_header: "---> " SECTION_TITLE "\n"
    SECTION_TITLE: "TITLE" | "CONTENT" | "SOURCE" | "OUTPUT" | "TEST"  # 补充示例中出现的TEST类型

    # 匹配所有不以--->开头的行,直到下一个section开头或文档结束
    content: (NON_SECTION_LINE)+
    NON_SECTION_LINE: /^(?!--->).*\n?/
""", start='start')

with open("src/index.mdx") as _in:
    tree = parser.parse(_in.read())
    print(tree.pretty())

关键调整说明

  • 重新定义start为section*,明确文档是多个section的序列,消除歧义
  • 给section补充content部分,让每个section完整包含标题和对应内容
  • 用(?!--->)否定前瞻正则,确保NON_SECTION_LINE不会匹配新的section起始行,正确划分每个section的边界
  • 补充示例里的TEST类型到SECTION_TITLE中,避免解析失败

测试你提供的示例文档,解析后的语法树会清晰拆分出每个section的标题和对应内容,不会再全部识别为ANY_LINE。

内容的提问来源于stack exchange,提问作者Alan W. Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:40:19