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

Python正则表达式提取诊断信息失效,请求有效解决方案

解决方案:提取诊断条目

你的原始正则表达式没法正常工作主要有几个原因:没考虑到O RTHOSIS DEVICE里的空格、没处理多行内容、分组逻辑不对。下面给你两种可靠的实现方案,按需选择:

方案一:基于诊断块提取(更精准,适配复杂结构)

这种方法先定位每个DIAGNOSIS开头的块,再从块里提取所有诊断行,能处理像第一个块里多行诊断的情况:

import re

txt = """DIAGNOSIS M19.072 Primary osteoarthritis, left ankle and foot 1
M19.072 Primary osteoarthritis, left ankle and foot 2
O RTHOSIS DEVICE(S) PRESCRIBED gfgfgfggfgfg 111111111112ffffffffff gfggggg
DIAGNOSIS M17.12 Unilateral primary osteoarthritis, left knee
O RTHOSIS DEVICE(S) PRESCRIBED gfgfgfggfgfg 11111ttttfffff gffffffffffffffffffffffffwwwwwwwwwree
DIAGNOSIS M75.42 Impingement syndrome of left shoulder
O RTHOSIS DEVICE(S) PRESCRIBED gfgfgfggfgfg 111111111112ffffffffff gfggggg wwwwwwwwww。"""

# 提取每个DIAGNOSIS块,直到下一个DIAGNOSIS、O RTHOSIS DEVICE或文本结束
diagnosis_blocks = re.findall(r'DIAGNOSIS\s+(.*?)(?=\s*(DIAGNOSIS|O RTHOSIS DEVICE|$))', txt, re.DOTALL)

diagnosis_Answer = []
for block, _ in diagnosis_blocks:
    # 拆分块为行,过滤空行并去除前后空白
    lines = [line.strip() for line in block.split('\n') if line.strip()]
    diagnosis_Answer.extend(lines)

print(diagnosis_Answer)

运行结果正好是你需要的四个诊断条目:

['M19.072 Primary osteoarthritis, left ankle and foot 1', 'M19.072 Primary osteoarthritis, left ankle and foot 2', 'M17.12 Unilateral primary osteoarthritis, left knee', 'M75.42 Impingement syndrome of left shoulder']

方案二:直接匹配诊断行(更简洁,适用于格式固定的场景)

如果你的诊断行都是以M+数字+.+数字的代码开头,可以直接用多行匹配提取,代码更短:

import re

txt = """DIAGNOSIS M19.072 Primary osteoarthritis, left ankle and foot 1
M19.072 Primary osteoarthritis, left ankle and foot 2
O RTHOSIS DEVICE(S) PRESCRIBED gfgfgfggfgfg 111111111112ffffffffff gfggggg
DIAGNOSIS M17.12 Unilateral primary osteoarthritis, left knee
O RTHOSIS DEVICE(S) PRESCRIBED gfgfgfggfgfg 11111ttttfffff gffffffffffffffffffffffffwwwwwwwwwree
DIAGNOSIS M75.42 Impingement syndrome of left shoulder
O RTHOSIS DEVICE(S) PRESCRIBED gfgfgfggfgfg 111111111112ffffffffff gfggggg wwwwwwwwww。"""

# 匹配所有以M开头的诊断代码行,re.MULTILINE让^匹配每行开头
diagnosis_Answer = re.findall(r'^M\d+\.\d+\s.+$', txt, re.MULTILINE)

print(diagnosis_Answer)

这个方案的前提是文本里没有其他以M\d+\.\d+开头的非诊断行,否则会误匹配。

为什么你的原始正则失效?

  1. 未处理空格:你要匹配的结束标记是O RTHOSIS DEVICE,但你的正则里写的是RTHOSIS DEVICE,漏掉了O和R之间的空格,导致无法定位结束位置。
  2. 未处理多行:没有加re.DOTALL标志,.*?不会匹配换行符,只能捕获同一行的内容,没法提取第一个块里的第二行诊断。
  3. 分组逻辑错误:你的正则分组方式会捕获整个DIAGNOSIS...RTHOSIS DEVICE的大段内容,而不是单独的诊断条目,后续也没法直接提取需要的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:12:45