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

正则匹配需求:提取studies/studiesUID后的带点序列号,排除seriesUID内容

正则匹配方案:提取studies/studyUID后的带点数字序列

问题核心

你需要匹配studies或studyUID之后、下一个非数字单词前的带多点数字序列,同时排除seriesUID后的同类序列。之前的正则失效,主要是两个细节错误:

  1. [\.\d+]是字符集合,仅匹配单个.、数字或+,无法表达「数字+.+数字」的重复结构
  2. [^a-zA-Z0-9]*匹配范围过宽,不如精准匹配非数字字符的\D*合适

正确正则表达式

(?:studies|studyUID)\D*(\d+(?:\.\d+)+)

正则拆解

  • (?:studies|studyUID):非捕获组,匹配目标前缀studies或studyUID,不占用最终捕获结果
  • \D*:匹配0个或多个非数字字符(比如冒号、引号、空格等分隔符),直到遇到数字序列
  • (\d+(?:\.\d+)+):捕获组,精准匹配带点的数字序列
    • \d+:匹配开头的一串数字
    • (?:\.\d+)+:非捕获组,重复匹配「.+数字」的结构,确保序列是数字.数字.数字...的格式

使用示例(Python)

import re

# 示例文本
raw_text = """
studies: 1.2.840.113619.2.248.116524556585.23765.1290700521734.13
studyUID="1.2.840.113619.2.248.116524556585.23765.1290700523548.1000"
seriesUID: 1.2.3.4.5
"""

# 编译正则并提取结果
pattern = re.compile(r'(?:studies|studyUID)\D*(\d+(?:\.\d+)+)')
target_sequences = pattern.findall(raw_text)

print(target_sequences)
# 输出结果:
# ['1.2.840.113619.2.248.116524556585.23765.1290700521734.13', '1.2.840.113619.2.248.116524556585.23765.1290700523548.1000']

这个正则会自动忽略seriesUID后的序列,只提取studies或studyUID对应的目标数字串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:50:29