使用正则表达式解析数据库表名称

时间:2019-04-11 03:33:46

标签: python sql regex parsing

我有包含数据库表名的数据。

具有如下代码:

for l,col in enumerate(data):
#print(data[l][1])
a = data[l][1]
parse = extract_tables(a)
print(parse)

数据如下:

['public.actor']
['public.film']
['film']
['film', 'rental', 'inventory']
['inventory i', 'customer c', 'film f', 'rental r']
['customer as c', 'rental as r']

我希望它像这样:

['actor']
['film']
['film']
['film', 'rental', 'inventory']
['inventory', 'customer', 'film', 'rental']
['customer', 'rental']

我想删除“ public”,“ as”以及诸如“ c”,“ f”和“ r”之类的别名,以便仅从数据中获取原始名称表。 (如演员,电影,租借)。 我在python中工作。请帮我。谢谢

3 个答案:

答案 0 :(得分:0)

如果唯一的情况是从输入中删除public.as x,则可以使用

re.sub("(public\.|\sas.+)", "", input_string)

答案 1 :(得分:0)

def clean(string):
    p = string.split()
    if len(p) == 1:
        return p[0].split('.')[-1]
    else:
        return p[0]

答案 2 :(得分:0)

您知道一组可能的数据库表名称吗?似乎您将能够从数据库中查询它。如果是这样:

database_tables = ['actor', 'film', 'rental', 'inventory', 'customer']
results = []
for db_list in data:
    db_list = [db for db in database_tables if db in ''.join(db_list)]
    results.append(db_list)

如果不这样做,那么您的解决方案将仅与清理传入数据的可预测性一样好。通过设置,您可以:

result = []
for db_list in data:
    db_list = [db.split('public.')[0] for db in db_list]
    db_list = [db.split(' ')[0] for db in db_list]
    result.append(db_list)