Python正则表达式拆分PL/SQL指令

Python正则表达式拆分PL/SQL指令,python,regex,plsql,Python,Regex,Plsql,我正在尝试拆分PL/SQL指令。我有以下的模式: splitter_re = '(DECLARE.+?END;)\n+|;\n+' 我有以下PL/SQL代码: CREATE TABLE bk_temp1_kb AS SELECT DISTINCT bk_c, bk_o, bk_r, bk_m FROM www2013_02; DECLARE time_val NUMBER; BEGIN SELECT day INTO time_val FROM days WHERE day

我正在尝试拆分PL/SQL指令。我有以下的模式:

splitter_re = '(DECLARE.+?END;)\n+|;\n+'
我有以下PL/SQL代码:

CREATE TABLE bk_temp1_kb AS
SELECT DISTINCT bk_c, bk_o, bk_r, bk_m
FROM www2013_02;


DECLARE
  time_val NUMBER;
BEGIN
  SELECT day INTO time_val
  FROM days
  WHERE day_desc = TO_CHAR(SYSDATE - 1);

  EXECUTE IMMEDIATE
  'DROP TABLE telep';

  EXECUTE IMMEDIATE
  'CREATE TABLE telep AS
  SELECT cc,
       dao,
       a,
       nam     
  FROM prodc
  WHERE timer = ' || time_val;
END;


DROP TABLE kart;

CREATE TABLE kart AS
SELECT b.dwp
FROM t_prod_new b
WHERE b.task = 'CARD';
split()的结果是:


这很好,但我没有任何元素。模式有什么问题?

您没有元素,因为您有由
()
创建的组,这些组没有内容

'(x)|y' 
matches "x" with ("x", ...)
matches "y" with (None, ...)
因为第一个
(x)
没有匹配项

改变

'(DECLARE.+?END;)\n+|;\n+'

删除“无”

(?:x)|y
is the same as
x|y 

括号不分组,则您的正则表达式不工作。如果我有一张名为“发送”的桌子,会发生什么?我必须问,为什么?不要在PL/SQL中创建表——这比其他任何东西都更表明数据库设计糟糕。它还在会话中执行隐式提交,这会让事情变得非常混乱。其次,如果您试图用Python解析它,那么一定有很好的理由这样做。不这样做比较容易。这只是一个例子。我有很多其他的,包括正常的SQL指令和声明。。。结束;这是我的主要问题,不是SQL代码本身。SQL不是一种常规语言。试图用正则表达式解析它注定要失败。可能有用。谢谢你的回复,但有了这个修正,我失去了我的全部…结束;表达式。
'(?:DECLARE.+?END;)\n+'
你能给我一些建议吗?我不知道如何处理它。
result=[x为x,如果x为x]
真正的问题是@Wooble说的:这种语言不能被正则表达式解析。只有在大多数情况下。有时您可能不知道
end
属于什么。
'(?:DECLARE.+?END;)\n+|;\n+'
(?:x)|y
is the same as
x|y