在Python2.7中工作。我试图从字符串中删除所有内容,而不是数据库和表名组合。为此,我使用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'
如果您知道字符串的结构并且它是相当规则的,那么有一种方法是不使用
.
来匹配所有内容,而是使用否定来匹配除空格或逗号以外的任何内容:或者更好的方法是使用
re.findall
和负捕获组: ,最后用空格或任何你想要的东西连接结果列表:相关问题 更多 >
编程相关推荐