2013-08-22 36 views
0

我想认识的模式是其名称不_CODE后缀结尾的表(表名不应该是这样test_code):如何使用正则表达式来识别该SQL创建表模式

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]; 

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

+0

那么,你想匹配或替换? – hwnd

+0

匹配create table语句并在“)”和“;”之间插入句子 –

+0

你在用什么语言? – hwnd

回答

0

可以

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) 
    return None 
+0

实际上这个代码还有一个问题。因为我一行一行地读取SQL代码,其中包含许多句子,如create table,drop table,alter table ...因此,要将您创建的表句分开以便在sqlsub函数上使用并不容易。 –

+0

为什么不直到“;”并追加 – FUD