【发布时间】:2022-01-08 07:12:30
【问题描述】:
我有以下工作正常:
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))
KeyError: '\1'
就好像它在捕获反向引用之前调用函数一样。我将如何解决这个问题?
我的目标是在替换后得到这个:
SELECT id, date, instance_id FROM __SHADOW__test.sales_1m
【问题讨论】:
-
你想完成什么?
source.ns_mapping[r'\1']显然是抛出异常,因为没有\1键 -
@Francisco 将反向引用的值传递给函数。
-
@Francisco 即在调用函数之前解析反向引用。现在我只是在做
re.findall并遍历这些值,但我想知道re.sub是否可以将反向引用值传递给一个函数(因此是问题)。