簡體   English   中英

使用正則表達式解析數據庫表名稱

[英]Parsing Database Table name using Regex

我有包含數據庫表名稱的數據。

用這樣的代碼:

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中工作。 請幫我。 謝謝

如果您唯一的情況是移除public. as x輸入的as x ,您可以使用

re.sub("(public\.|\sas.+)", "", input_string)
def clean(string):
    p = string.split()
    if len(p) == 1:
        return p[0].split('.')[-1]
    else:
        return p[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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM