我有以下作業正常:
sql = 'SELECT id, date, instance_id FROM sales_1m'
print (re.sub(r'\b(%s)\b' % '|'.join(source.ns_mapping.keys()), r'\1', sql))
# SELECT id, date, instance_id FROM sales_1m
但是,一旦我嘗試將反向參考傳遞給函式,它就會產生以下內容:
print (source.ns_mapping)
# {'data': '__SHADOW__test.data', 'test.data': '__SHADOW__test.data', 'data2': '__SHADOW__test.data2', 'test.data2': '__SHADOW__test.data2', 'sales_1m': '__SHADOW__test.sales_1m', 'test.sales_1m': '__SHADOW__test.sales_1m', 'season': '__SHADOW__test.season', 'test.season': '__SHADOW__test.season', 'team': '__SHADOW__test.team', 'test.team': '__SHADOW__test.team'}
print (re.sub(r'\b(%s)\b' % '|'.join(source.ns_mapping.keys()),
source.ns_mapping[r'\1'], sql))
鍵錯誤:'\1'
就好像它在捕獲反向參考之前呼叫函式一樣。我將如何解決這個問題?
我的目標是在替換后得到這個:
SELECT id, date, instance_id FROM __SHADOW__test.sales_1m
uj5u.com熱心網友回復:
的第二個引數re.sub可以接受一個函式,所以你可以這樣做:
>>> re.sub(r'\b(%s)\b' % '|'.join(ns_mapping.keys()), lambda x: ns_mapping[x.group()], sql)
'SELECT id, date, instance_id FROM __SHADOW__test.sales_1m'
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/405583.html
標籤:
上一篇:正則運算式替換字串中的美元價格
下一篇:正則運算式:從兩個模式中提取字符
