Python正则表达式:提取Jenkinsfile触发器括号及引号内字符串
提取Jenkinsfile触发器的参数值
要精准提取Jenkinsfile中触发器的参数内容——不管是括号内的完整参数列表,还是引号包裹的具体值,可以用正则表达式结合针对性的匹配逻辑来实现,以下是具体方案:
分场景匹配方案
1. 提取括号内的完整参数列表
适用于类似upstream(upstreamProjects: 'upstreamJob', threshold: hudson.model.Result.SUCCESS)的场景,需要完整获取括号内的所有参数内容。
使用正则表达式:
\((.*?)\)
- 匹配逻辑:
\(和\)精准定位括号,.*?以非贪婪模式捕获括号内的所有内容,避免误匹配多个嵌套括号的情况。 - 示例结果:对上述
upstream触发器,提取结果为upstreamProjects: 'upstreamJob', threshold: hudson.model.Result.SUCCESS
2. 提取引号内的参数值
适用于类似pollSCM('H * * * *')的场景,只需要获取单引号包裹的具体参数值。
使用正则表达式:
'([^']+)'
- 匹配逻辑:
'定位单引号,[^']+捕获所有非单引号的内容,确保只拿到引号内的目标值。 - 示例结果:对上述
pollSCM触发器,提取结果为H * * * *
脚本实现示例(Python)
如果需要批量处理Jenkinsfile中的触发器,可以用脚本自动匹配提取:
import re def extract_trigger_param(line): # 优先匹配引号内的内容(针对pollSCM这类带引号的触发器) quote_match = re.search(r"'([^']+)'", line) if quote_match: return quote_match.group(1) # 再匹配括号内的完整参数(针对upstream这类多参数触发器) bracket_match = re.search(r"\((.*?)\)", line) if bracket_match: return bracket_match.group(1) # 无匹配时返回None return None # 测试用例 test_lines = [ "upstream(upstreamProjects: 'upstreamJob', threshold: hudson.model.Result.SUCCESS)", "pollSCM('H * * * *')" ] for line in test_lines: result = extract_trigger_param(line) print(f"输入: {line}\n提取结果: {result}\n")
运行脚本后会输出:
输入: upstream(upstreamProjects: 'upstreamJob', threshold: hudson.model.Result.SUCCESS) 提取结果: upstreamProjects: 'upstreamJob', threshold: hudson.model.Result.SUCCESS 输入: pollSCM('H * * * *') 提取结果: H * * * *
内容的提问来源于stack exchange,提问作者Viren Mody
相关产品推荐
相关产品推荐

