Skip to main content
 首页 » 编程设计

python之需要正则表达式才能在 python 中仅获取 Tably 名称和主键

2025年05月04日38TianFang

可能这个问题很愚蠢,但我无法生成正则表达式来获取表名和主键。

表:

CREATE TABLE 'dhcpr_dhcprelayinterface'  ( 
        'vrId' integer default 0, 
        'ifName' string , 
        PRIMARY KEY(ifName,vrId), 
        FOREIGN KEY (vrId) REFERENCES 'vr_vr'(vrId) ON DELETE CASCADE ON UPDATE CASCADE); 

我正在使用: begin = re.compile(r"CREATE TABLE[\"]*([^\"]+)[\"]*[(]([^/;]+)[/;]",re. IGNORECASE) 获取所有表名和数据。

但我只需要包含表名和 PRIMARY KEY 的数据。

预期输出:

dhcpr_dhcprelayinterface 
PRIMARY KEY(ifName,vrId) 

请您参考如下方法:

此解决方案解决了一些您似乎并不担心(但值得担心)的问题,例如,SQLite 允许您编写转义 '作为'' , CREATE 之间可能有任意数量的空格,甚至是换行符和 TABLE , 和 PRIMARY 之间, KEY , 和 ( :

s = """\ 
CREATE TABLE 'dhcpr_dhcprelayinterface'  ( 
    'vrId' integer default 0, 
    'ifName' string , 
    PRIMARY KEY(ifName,vrId), 
    FOREIGN KEY (vrId) REFERENCES 'vr_vr'(vrId) 
    ON DELETE CASCADE ON UPDATE CASCADE); 
""" 
 
pattern = """ 
    CREATE \s+ TABLE \s+ 
    '((?:[^']|'')*)'      # allows escaped single quote 
    .+                    # stuff between table name and primary key 
    (PRIMARY \s+ KEY\s? \([^)]*\)) 
""" 
mo = re.search(pattern, s, re.IGNORECASE | re.VERBOSE | re.DOTALL) 
print(mo.groups()) 

输出:

('dhcpr_dhcprelayinterface', 'PRIMARY KEY(ifName,vrId)')