正则表达式python sql语句

时间:2017-12-09 19:12:45

标签: python

我正在编写正则表达式代码以从SQL语句中提取项目。我想在SELECT * FROMWHERE语句之后提取一个项目元组。

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"""

1 个答案:

答案 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']