0

我想识别的模式是那些名称不以 _code 后缀结尾的表(表名不应像 test_code):

CREATE TABLE test1
(
    aa INT, -- comment1
    bb CHAR(10), -- comment2
    cc INT, -- comment3
    PRIMARY KEY (aa)
); 

这也可以是这样的单行样式:

CREATE TABLE test2( aa INT, bb CHAR(10), cc INT, PRIMARY KEY (aa));

我使用了以下正则表达式但没有用:

CREATE TABLE .*\n?\([.\n\;]*

我想识别它们并在“)”和“;”之间插入一个句子 变成这样:

CREATE TABLE test1
(
    aa INT, -- comment1
    bb CHAR(10), -- comment2
    cc INT, -- comment3
    PRIMARY KEY (aa)
)[sentence goes to here]; 

请告诉我应该如何解决这个问题。

4

1 回答 1

1

你可以

import re
rgx = re.compile(r"^\s*CREATE\s+TABLE\s+([\w\d]+)\s*(\(.*\))\s*;\s*",re.MULTILINE|re.DOTALL)

def sqlsub(sql, statement):
  m = rgx.match(sql)
  if m and not m.group(1).endswith("_code"):
    return "CREATE TABLE %s %s %s;"%(m.group(1),m.group(2),statement)
于 2013-08-22T04:18:52.767 回答