正则表达式python sql语句

正则表达式python sql语句,python,Python,我正在编写一个正则表达式代码来从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.Col

我正在编写一个正则表达式代码来从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"""

您可以循环返回的结果并使用re.sub:

输出:

('A, B, C', 'A.ColA = B.ColB AND B.ColB2=C.ColC')
['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)

谢谢欣赏附加的循环方法。而且还喜欢图案的整洁alternation@GenXeral很乐意帮忙!如果答案对你有帮助,请接受。非常感谢。
['A, B, C', 'A.ColA = B.ColB AND B.ColB2=C.ColC']