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

条件正则表达式构建:匹配不同格式字符串中的目标内容

解决方案

针对捕获不带括号的核心描述(如Age场景)

你之前的两个正则组合失效,是因为正则的贪婪模式和匹配优先级问题。直接用|拼接时,第一个正则.+(?= \(?.+\)?)会贪婪匹配到几乎整个字符串,第二个正则根本没机会生效。

可以用单一正向预查覆盖两种场景,正则如下:

^(.+?)(?= (?:\(.+\) )?\d+\.\d+$)

解释:

  • ^:从字符串起始位置匹配,避免中间匹配干扰
  • (.+?):非贪婪捕获目标内容,确保不会过度匹配
  • (?= ...):正向预查,限定后面必须是两种结尾之一:
    • (?:\(.+\) )?:可选的“(任意文本) ”结构(非捕获组,不纳入结果)
    • \d+\.\d+$:字符串结尾的小数格式(如0.0、1.0)

这个正则能同时适配你的两个Age场景:

  • 输入'Age at death (years) 0.0' → 捕获Age at death
  • 输入'Age at death 0.0' → 捕获Age at death

针对捕获包含第一个括号的内容(如Weight/BMI场景)

如果需要保留第一个闭合括号内的内容,排除后续文本和结尾小数,用这个正则:

^(.+?\))(?= .*\d+\.\d+$)

解释:

  • (.+?\)):非贪婪捕获到第一个)为止,确保只保留第一个括号及其前面的内容
  • (?= .*\d+\.\d+$):预查后面存在任意文本+结尾小数,确保匹配的是目标部分

适配示例:

  • 输入'Weight (pre-imaging) (Kg) 1.0' → 捕获Weight (pre-imaging)
  • 输入'Body mass index (BMI) more text to be captured (Kg/m2) 0.0' → 捕获Body mass index (BMI)

如果需要区分两种场景自动匹配

如果你的字符串同时存在两种类型(有的要排除括号,有的要保留第一个括号),可以用分支结构结合位置限定,让正则优先匹配需要保留括号的场景,再匹配排除括号的场景:

^(.+?\))(?= .*\d+\.\d+$)|^(.+?)(?= (?:\(.+\) )?\d+\.\d+$)

使用时取第一个非空的捕获组即可(第一种场景匹配到组1,第二种场景匹配到组2)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:05:18