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

Python如何使用re匹配提取两个Type:标记之间的全部文本

问题分析

你之前写的正则返回空有四个核心原因:

  • 语法错误:正则中的右括号没有对应的左括号,属于无效正则
  • 字符匹配范围过窄:[\w\s]只能匹配字母、数字、下划线和空白,无法匹配文本中的<、>、(、:等特殊字符
  • 未开启跨行匹配:Python正则默认.不匹配换行符,无法匹配多行内容
  • 未覆盖末尾块场景:最后一个Type块后面没有后续的Type:标记,原写法会遗漏最后一段
正确实现方案

正则写法

使用re.DOTALL(简写re.S)标记让.匹配换行符,配合非贪婪匹配和正向前瞻,既匹配两个Type:之间的内容,也能匹配最后一个Type:到文本末尾的内容:

import re

# 你的原始文本
text = """<class 'NXOpen.Features.FeatureCollection'>
Type: <class 'NXOpen.Features.DatumCsys'> FeatureName: Datum Coordinate System(0)
    Parents:
    Children:
        Name:  , JournalIdentifier: SKETCH(1:1B)
    Expressions:
    Entities:
        Name:  , JournalIdentifier: HANDLE R-849
        Name:  , JournalIdentifier: HANDLE R-850
        Name:  , JournalIdentifier: DATUM_CSYS(0) YZ plane
        Name:  , JournalIdentifier: DATUM_CSYS(0) XZ plane
        Name:  , JournalIdentifier: DATUM_CSYS(0) XY plane
        Name:  , JournalIdentifier: DATUM_CSYS(0) X axis
        Name:  , JournalIdentifier: DATUM_CSYS(0) Y axis
        Name:  , JournalIdentifier: DATUM_CSYS(0) Z axis
Type: <class 'NXOpen.Features.DatumCsys'> FeatureName: Datum Coordinate System(1)inf
    Parents:
        Name:  , JournalIdentifier: DATUM_CSYS(0)
    Children:
        Name:  , JournalIdentifier: SKETCH(1)
    Expressions:
    Entities:
        Name:  , JournalIdentifier: HANDLE R-4283
        Name:  , JournalIdentifier: HANDLE R-4284
        Name:  , JournalIdentifier: SKETCH(1:1B) YZ plane
        Name:  , JournalIdentifier: SKETCH(1:1B) XZ plane
        Name:  , JournalIdentifier: SKETCH(1:1B) XY plane
        Name:  , JournalIdentifier: SKETCH(1:1B) X axis
        Name:  , JournalIdentifier: SKETCH(1:1B) Y axis
        Name:  , JournalIdentifier: SKETCH(1:1B) Z axis
"""

# 核心提取逻辑
result = re.findall(r'^Type:.*?(?=\nType:|\Z)', text, flags=re.S | re.M)

正则说明

  • ^Type::匹配行开头的Type:标记,re.M多行模式让^匹配每一行的开头
  • .*?:非贪婪匹配任意字符(开启re.S后匹配范围包含换行符)
  • (?=\nType:|\Z):正向前瞻,匹配到下一个Type:开头的行或者文本结束位置为止,不会消耗下一个Type:标记
  • re.S:让.匹配换行符
  • re.M:多行模式,让^识别每一行的开头

提取出来的result列表就是你需要的两个文本段,直接遍历即可拿到对应内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:15:08