最近的項目需求中需要解析sql得表名,由於只需要表名我覺得應該用相對粗暴一點的方式來解析
初步思路:
1.轉義字符:去除兩個引號連在一起的
2.字符串: 去除所有被引號包裹的
3.括號:識別括號處理
4.關鍵字: 用關鍵字切割語句,去除與表名 無關的
5.解析與表名有關的切割分段得表名
先是粗暴的括號處理
def get_str(s):
you = 0
st = []
re = ''
max_you = 0
for ii in s:
st.append(ii)
while st:
tmp = st.pop()
re = tmp + re
if tmp == ')':
you += 1
if max_you < you:
max_you = you
elif tmp == '(':
you -= 1
if you == 0:
return [re, max_you]
return [s, max_you]
s = "(1,2,(a,b),3,4,(a,b,(0,c,s,1000),(1,a,1200),(2,1400),(3,1600),(4,1800),n,m),((sd,df),(sw,gt))t,b)"
array = []
array_level = []
for ch in range(len(s)):
if s[ch] == ')':
next_str = get_str(s[:ch+1])
while len(array_level) < next_str[1]:
array_level.append([])
array.append(next_str[0])
array_level[next_str[1]-1].append(next_str[0])
print array
print '-' * 60
for i in array_level:
print i