我正在编写正则表达式代码以从SQL语句中提取项目。我想在SELECT * FROM
和WHERE
语句之后提取一个项目元组。
pattern = '''
SELECT\s\*\sFROM\s ([a-zA-Z\s*\,*\=\.]+) \sWHERE \s*([a-zA-Z\d*\s*\,*\=*\.*]+)'''
从上面的模式中,我将它用于下面的SQL语句,并获得以下结果:
('A, B, C\n ', 'A.ColA = B.ColB AND B.ColB2=C.ColC')
我知道它是因为WHERE
之前的巨大突破,但是我如何在第一次元组之后将其放入并消除巨大的空间和/n
?
q = """SELECT * FROM A, B, C
WHERE A.ColA = B.ColB AND B.ColB2=C.ColC"""
答案 0 :(得分:1)
您可以循环返回结果并使用re.sub
:
import re
results = ('A, B, C\n ', 'A.ColA = B.ColB AND B.ColB2=C.ColC')
new_results = tuple(re.sub('\n\s+$', '', i) for i in results)
输出:
('A, B, C', 'A.ColA = B.ColB AND B.ColB2=C.ColC')
或者,您可以改变您的模式:
import re
q = """SELECT * FROM A, B, C
WHERE A.ColA = B.ColB AND B.ColB2=C.ColC"""
new_data = re.findall('(?<=SELECT \* FROM\s)[A-Z\s,]+(?=\n)|(?<=WHERE\s)[\w\W]+', q)
输出:
['A, B, C', 'A.ColA = B.ColB AND B.ColB2=C.ColC']