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

Python正则匹配提取job_name/job_action失败,求正确正则写法

修正正则表达式提取PL/SQL作业字段内容

问题场景

给定PL/SQL作业创建脚本,需提取job_name和job_action字段内容,但原Python代码使用正则替换后输出包含大量冗余内容,核心问题是误用正则方法,且正则规则未适配多行场景。

原代码问题分析

原代码使用re.sub()方法,该方法会替换文本中匹配部分并保留其余内容,而非仅提取目标字段;同时job_action的正则未处理多行内容,导致无法正确捕获完整的PL/SQL块。

修正方案

1. 提取job_name

使用re.search()匹配目标行并捕获单引号内的内容,正则适配任意缩进格式:

import re

# 读取文件内容
with open("the_file.sql") as sfile:
    filesrc = sfile.read()

# 提取job_name
job_name_pattern = re.compile(r'^\s*job_name\s*=>\s*\'(.*?)\',', re.MULTILINE)
name_match = job_name_pattern.search(filesrc)
job_name = name_match.group(1) if name_match else "未找到job_name"

2. 提取job_action

job_action内容为多行PL/SQL块,需添加re.DOTALL模式让.匹配换行符,同时用非贪婪匹配捕获完整内容:

# 提取job_action
job_action_pattern = re.compile(r'^\s*job_action\s*=>\s*\'(.*?)\',', re.MULTILINE | re.DOTALL)
action_match = job_action_pattern.search(filesrc)
job_action = action_match.group(1).strip() if action_match else "未找到job_action"

完整代码与输出

import re

with open("the_file.sql") as sfile:
    filesrc = sfile.read()

# 提取job_name
job_name_pattern = re.compile(r'^\s*job_name\s*=>\s*\'(.*?)\',', re.MULTILINE)
name_match = job_name_pattern.search(filesrc)
job_name = name_match.group(1) if name_match else "未找到job_name"

# 提取job_action
job_action_pattern = re.compile(r'^\s*job_action\s*=>\s*\'(.*?)\',', re.MULTILINE | re.DOTALL)
action_match = job_action_pattern.search(filesrc)
job_action = action_match.group(1).strip() if action_match else "未找到job_action"

print(f"  Job Name:   {job_name}")
print(f"  Job Action: {job_action}")

执行后输出:

Job Name:   MY_JOB
  Job Action: begin
run_this_proc;
end;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 15:43:14