Я не думаю, что регулярные выражения являются наиболее подходящим инструментом для работы.Поскольку мы работаем в экосистеме Python, нам повезло, что мы можем позволить себе роскошь использовать возможности огромного набора сторонних пакетов на PyPI.Существует популярный пакет с именем sqlparse
, в котором реализован синтаксический анализатор SQL .
. Вы можете анализировать оператор SQL и анализировать проанализированные токены:
In [1]: import sqlparse
In [2]: sql = """ UPDATE dbname.tablename
...: SET
...: alias1=T1.col1,
...: alias2=T1.col2
...: FROM datafabric_cfd_dea.T1 T1
...: WHERE
...: tablename.keycol =T1.keycol
...: AND tablename.col3='ABC'
...: AND T1.col3='ABC'
...: AND tablename.col3=T1.col3
...: AND T1.col2='XYZ';"""
In [3]: parsed_sql = sqlparse.parse(sql)
# get the where clause
In [4]: where_clause = next(token for token in parsed_sql[0].tokens
if isinstance(token, sqlparse.sql.Where))
In [5]: where_clause.tokens
Out[5]:
[<Keyword 'WHERE' at 0x10FCD1A78>,
<Newline ' ' at 0x10FCD1668>,
<Whitespace ' ' at 0x10FCD1B48>,
<Comparison 'tablen...' at 0x10FCCDB50>,
<Newline ' ' at 0x10FCD1AE0>,
...
<Comparison 'T1.col...' at 0x10FCCDD50>,
<Punctuation ';' at 0x10FCF5EF0>]