2017-12-09 7 views
0

私は、SQL文から項目を抽出する正規表現コードを書いています。私はSELECT * FROMWHEREステートメントの後の項目のタプルを抜き出したい。上記のパターンから正規表現pythonのSQL文

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を取りますか?

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') 

または:

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) 

を出力:

q = """SELECT * FROM A, B, C 
      WHERE A.ColA = B.ColB AND B.ColB2=C.ColC""" 

答えて

1

あなたは、返される結果をループしてre.sub使用することができます:

['A, B, C', 'A.ColA = B.ColB AND B.ColB2=C.ColC'] 
+0

ありがとうございました!それを繰り返していくという付加的なアプローチに感謝します。また、パターンの交替の清潔さが大好きです – GenXeral

+0

@GenXeralは助けてうれしい!それがあなたを助けたら答えを受け入れてください。ありがとうございました! – Ajax1234