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

正则匹配制表符分层文本中Match后同层级名称问题

制表符层级文本的Match后续名称提取方案

问题背景

有一份用制表符划分层级的文本,需要提取每个Match行之后、与该Match**同层级(前置制表符数量一致)**的所有名称,遇到层级变化的行就停止,且不能使用多行模式。现有正则只能匹配Match后的第一个名称,无法覆盖后续同层级内容。

文本示例:

Connection
            Match
                Fridolin
                Marten
    Connection
            Inventory
                        Fill Up
            Fill Up
        Match
            Peter
            Marcus
        Storage
                Room 1
                Room 2
                Room 3
            Match
                Albert
                Jonas
                Hans
    List
    Match
        Peter
        Marcus

解决方案

核心逻辑

先捕获Match行的前置制表符序列,用反向引用锁定后续行的缩进层级,匹配所有符合字符规则的名称行,直到遇到缩进不同的行。

正则表达式

(\t+)Match\n((?:\1[ a-zA-ZäöüÄÖÜßé0-9\./-]+\n?)+)

细节说明

  • (\t+):把Match行的前置制表符存为捕获组,记录当前层级的缩进量。
  • Match\n:定位到Match关键字和换行,作为提取的起始标记。
  • (?:\1[ a-zA-ZäöüÄÖÜßé0-9\./-]+\n?)+:
    • \1:反向引用之前捕获的制表符,确保后续行和Match同层级。
    • [ a-zA-ZäöüÄÖÜßé0-9\./-]+:匹配合法的名称字符(修正了原正则里重复的\-问题)。
    • \n?:兼容最后一行没有换行的情况。
    • 整个非捕获组用+包裹,实现匹配多个连续的同层级名称行。

若实际需求是提取Match的子层级名称

如果示例里的名称是Match的下一级(多一个制表符),把正则调整为:

(\t+)Match\n((?:\t\1[ a-zA-ZäöüÄÖÜßé0-9\./-]+\n?)+)

这里\t\1表示比Match多一个制表符的子层级,匹配所有子层级的名称直到层级变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:59:14