可能这个问题很愚蠢,但我无法生成正则表达式来获取表名和主键。
表:
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)')
