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

如何用条件正则表达式按规则提取URI至命名捕获组

条件正则表达式提取URI至命名捕获组

问题描述

你需要从字符串中提取URI到名为<value>的命名捕获组,规则如下:

  • 如果URI包含execute,仅匹配到execute为止
  • 如果不包含execute,匹配完整URI

当前使用的(?P<value>\S+)会匹配完整URI(即使包含execute),希望实现符合规则的匹配,示例如下:

原始URI期望结果
/cu/rest/en_US/reports/execute/310F02501000016D001218A1AZ6B2D16/cu/rest/en_US/reports/execute
/cu/rest/en_US/reports/execute/newResource//cu/rest/en_US/reports/execute
/cu/rest/en_US/link/xml/cu/rest/en_US/link/xml

解决方案

当然可以实现!你需要的是带条件分支的正则表达式,通过正向/负向预查区分两种匹配场景,具体实现如下:

(?P<value>(?=.*execute).*?/execute|(?!.*execute)\S+)

正则表达式拆解

  • (?=.*execute):正向预查,确认字符串中存在execute,触发第一分支逻辑
  • .*?/execute:非贪婪匹配任意字符,直到遇到并包含最后一个/execute,确保停在execute结束的位置
  • |:分支运算符,分隔两种匹配规则
  • (?!.*execute):负向预查,确认字符串中不存在execute,触发第二分支逻辑
  • \S+:匹配所有非空白字符,即完整的URI

匹配验证

将上述正则应用到你的示例中,会完全符合预期:

  1. 对于/cu/rest/en_US/reports/execute/310F02501000016D001218A1AZ6B2D16,捕获到/cu/rest/en_US/reports/execute
  2. 对于/cu/rest/en_US/reports/execute/newResource/,捕获到/cu/rest/en_US/reports/execute
  3. 对于/cu/rest/en_US/link/xml,捕获到完整的/cu/rest/en_US/link/xml

如果你的URI有固定前缀(比如都以/cu/rest/开头),可以进一步优化正则来提升精准度:

(?P<value>/cu/rest/[^/\s]+/(?:reports/execute|(?:(?!execute).)+))

这个版本限定了前缀范围,避免匹配到无关的非空白字符串,适合场景固定的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:48:31