正则匹配制表符分层文本中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
相关产品推荐
相关产品推荐

