3 回答

TA貢獻2003條經(jīng)驗 獲得超2個贊
除了正則表達式,您還可以使用sqlparse并拆分字符串:
import sqlparse
stmts = """PRIMARY INDEX FIRST_ONE ( PLATFORM_CD ,SYSTEM_NAME ,DB_NAME ,
TABLE_NAME ,COLUMN_NAME );
) PRIMARY INDEX SECOND_ONE ( Hq_Id);
PRIMARY INDEX THIRD_ONE ( DB_NAME ,BU_NAME );
PRIMARY INDEX FOURTH_ONE ( DB_NAME ,TABLE_NAME ,COLUMN_NAME, PII_CD);
UNIQUE PRIMARY INDEX FIFT_ONE( DB_NAME,PRIMARY_SYSTEM_NAME);"""
for stmt in sqlparse.split(stmts):
res = sqlparse.parse(stmt) # parses each statement
for tok in (res[0].tokens): # iterate all tokens
if isinstance(tok, sqlparse.sql.Function):
idx, columns = str(tok).split('(')
cols = [c.strip() for c in columns[:columns.find(')')].split(',')]
print (idx.strip(), cols)
返回:
FIRST_ONE ['PLATFORM_CD', 'SYSTEM_NAME', 'DB_NAME', 'TABLE_NAME', 'COLUMN_NAME']
SECOND_ONE ['Hq_Id']
THIRD_ONE ['DB_NAME', 'BU_NAME']
FOURTH_ONE ['DB_NAME', 'TABLE_NAME', 'COLUMN_NAME', 'PII_CD']
FIFT_ONE ['DB_NAME', 'PRIMARY_SYSTEM_NAME']

TA貢獻1946條經(jīng)驗 獲得超3個贊
splash58 提到的正則表達式有效..
\w+(?=\s*()|(?:(?<=,|())\s*(\w+)\s*(?:\s*(\w+)\s*)?
添加回答
舉報