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

如何编写正则表达式以匹配包含前置标识词的Jenkins Pipeline命令式与声明式代码块

解决Jenkins Pipeline代码块的正则匹配问题

我来帮你调整正则表达式,让它能精准匹配带node、pipeline这类前置标识词的完整Jenkins Pipeline代码块,不管是命令式还是声明式的都能搞定!

问题分析

你原来的正则只能匹配独立的花括号内容,没法关联前面的标识词。我们需要把标识词和后续的嵌套花括号块绑定起来,同时还要正确处理多层嵌套的花括号结构(比如Pipeline里嵌套的stage、steps块)。

修改后的正则表达式

import regex
pattern = regex.compile(r'(node|pipeline)\s*(\{(?:[^{}]|(?2))*\})', regex.DOTALL)

正则各部分解释

  • (node|pipeline):匹配你需要捕获的前置标识词,你可以根据需求扩展这个列表(比如加上stage、timeout等)
  • \s*:匹配标识词和左花括号之间的任意空白字符(空格、换行、制表符都算),兼容不同的代码格式化风格
  • (\{(?:[^{}]|(?2))*\}):核心的嵌套花括号匹配逻辑,(?2)引用第二个捕获组的正则规则,确保能正确识别多层嵌套的花括号,不会提前终止匹配
  • regex.DOTALL:让正则中的通配符能匹配换行符,这样即使代码块跨多行也能完整捕获

测试示例

用你的Jenkins Pipeline代码来测试一下:

import regex

# 你的混合Pipeline代码
pipeline_code = """node { timeout(unit: 'SECONDS', time: 5) { stage("One"){ sleep 10 echo 'hello' } } }
pipeline { agent any parameters { choice( description: 'Run flyway database migration using latest master branch from prices in what environment?', name: 'environment', choices: ['PRE', 'PRO'] ) } stages { stage("Wat") { steps { echo "selectedEnvironment: ${params.environment}" } } } }"""

# 编译正则并查找匹配
pattern = regex.compile(r'(node|pipeline)\s*(\{(?:[^{}]|(?2))*\})', regex.DOTALL)
matched_blocks = pattern.findall(pipeline_code)

# 输出匹配结果
for idx, (keyword, block) in enumerate(matched_blocks, 1):
    full_code_block = f"{keyword}{block}"
    print(f"匹配到的代码块 #{idx}:\n{full_code_block}\n")

运行这段代码后,会输出两个完整的代码块:

  1. 命令式的node块
  2. 声明式的pipeline块

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:56:25