import re
p = '(?i)SELECT (?P<columns>.*) FROM (?P<source>.*?)(?: WHERE (?P<where_clause>.*))?;$'
strs = ['select * from t1;', 'select * from t1 where c1 == 0;']
for s in strs:
m = re.match(p, s)
if m:
print(m.group("columns"))
print(m.group("source"))
print(m.group("where_clause"))
aW1wb3J0IHJlCnAgPSAnKD9pKVNFTEVDVCAoP1A8Y29sdW1ucz4uKikgRlJPTSAoP1A8c291cmNlPi4qPykoPzogV0hFUkUgKD9QPHdoZXJlX2NsYXVzZT4uKikpPzskJwpzdHJzID0gWydzZWxlY3QgKiBmcm9tIHQxOycsICdzZWxlY3QgKiBmcm9tIHQxIHdoZXJlIGMxID09IDA7J10KZm9yIHMgaW4gc3RyczoKCW0gPSByZS5tYXRjaChwLCBzKQoJaWYgbToKCQlwcmludChtLmdyb3VwKCJjb2x1bW5zIikpCgkJcHJpbnQobS5ncm91cCgic291cmNlIikpCgkJcHJpbnQobS5ncm91cCgid2hlcmVfY2xhdXNlIikp