2016-07-12 4 views
0

Python 2.7で作業しています。私はデータベースとタブ名の組み合わせではなく、すべてのものを文字列から削除しようとしています。私は削除Python RegEx置換 - 検索の反転をあまりにも多く受け入れる

s = "replace view dw1.tbl1_st as select dw2.tbl1_st.col1, dw2.tbl1_st.col2, " 
s = s + "dw2.tbl1_st.col3, dw2.tbl1_st.col4 dw2.tbl1_st.col5, " 
s = s + "dw2.tbl1_st.col6, dw2.tbl1_st.col7 dw2.tbl1_st.col15, dw2.tbl1_st.col8, " 
s = s + "dw2.tbl1_st.col9, dw2.tbl1_st.col10, dw2.tbl1_st.col11, dw2.tbl1_st.col12, " 
s = s + "dw2.tbl1_st.col13, dw2.tbl1_st.col14 from dw2.tbl1_st;" 

replaced = re.sub(r'((?!\w+\.\w+).)', '', s) 

結果セットがある(私は値を区切るために維持する必要があります)すべての空白を、このために正規表現を使用して、意図せずに削除しています「」データベースとテーブル名との間。でも私はしたい "。"空白を残しておきます。

>> replaced 
'dw1dw2tbl1_stdw2tbl1_stdw2tbl1_stdw2tbl1_stdw2tbl1_stdw2tbl1_stdw2tbl1_ 
stdw2tbl1_stdw2tbl1_stdw2tbl1_stdw2tbl1_stdw2tbl1_stdw2tbl1_ 
stdw2tbl1_stdw2tbl1_stdw2' 

>> desired_results (Option 1) 
'dw1.dw2.tbl1_st dw2.tbl1_st, dw2.tbl1_st, dw2.tbl1_st, dw2.tbl1_st, 
dw2.tbl1_st, dw2.tbl1_st, dw2.tbl1_st, dw2.tbl1_st, dw2.tbl1_st, 
dw2.tbl1_st, dw2.tbl1_st, dw2.tbl1_st, dw2.tbl1_st, dw2.tbl1_st, dw2.' 

それとも均等に実行可能:

>> desired_results (Option 2) 
'dw1 dw2tbl1_st dw2tbl1_st dw2tbl1_st dw2tbl1_st dw2tbl1_st 
dw2tbl1_st dw2tbl1_st dw2tbl1_st dw2tbl1_st dw2tbl1_st 
dw2tbl1_st dw2tbl1_st dw2tbl1_st dw2tbl1_st dw2tbl1_st dw2' 

答えて

0

一つの選択肢、あなたは文字列の構造を知っているし、それは、かなり規則的である代わりに、すべてを一致させるために.をuseingである場合に否定を使用して、動作しますまだ

>>> replaced = re.sub(r'((?!\w+\.\w+)[^, ])', '', s) 
>>> replaced 
' dw1 dw2tbl1_st, dw2tbl1_st, dw2tbl1_st, dw2tbl1_st dw2tbl1_st, 
dw2tbl1_st, dw2tbl1_st dw2tbl1_st, dw2tbl1_st, dw2tbl1_st, dw2tbl1_st, 
dw2tbl1_st, dw2tbl1_st, dw2tbl1_st, dw2tbl1_st dw2' 

以上、re.findallと負のキャプチャグループを使用します:何もBUTスペースまたはカンマが一致 を、finall結果リストを空白または任意のものと結合します。

>>> " ".join(re.findall(r'((?:\w+\.\w+))',s)) 
'dw1.tbl1_st dw2.tbl1_st dw2.tbl1_st dw2.tbl1_st dw2.tbl1_st 
dw2.tbl1_st dw2.tbl1_st dw2.tbl1_st dw2.tbl1_st dw2.tbl1_st 
dw2.tbl1_st dw2.tbl1_st dw2.tbl1_st dw2.tbl1_st dw2.tbl1_st 
dw2.tbl1_st dw2.tbl1_st' 
+0

Works完璧に。ありがとう! –

関連する問題