最近的项目需求中需要解析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 arrayprint ‘-‘ * 60for i in array_level: print i
时间: 2024-10-06 20:06:24