Синтаксический анализ имени таблицы базы данных с использованием регулярных выражений

#python #sql #regex #parsing

#python #sql #регулярное выражение #синтаксический анализ

Вопрос:

У меня есть данные, содержащие имя таблицы базы данных.

с помощью такого кода:

 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']
  

я хочу удалить «общедоступные», «as», а также псевдонимы типа «c», «f» и «r», чтобы я получал только исходную таблицу имен из данных. (например, актер, фильм, прокат).
я работаю на python. пожалуйста, помогите мне. Спасибо

Комментарии:

1. Пожалуйста, исправьте свой отступ.

Ответ №1:

Если ваши единственные случаи — удалить public. и as x из ваших входных данных, вы можете использовать

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

Ответ №2:

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

Комментарии:

1. Здравствуйте. Вам также необходимо добавить некоторые пояснения к вашему ответу. Вы можете написать о том, какую ошибку допустил ОП или что он / она пропустил.

Ответ №3:

Знаете ли вы набор ожидаемых возможных имен таблиц базы данных? Похоже, вы могли бы или могли бы запросить его из базы данных. Если это так:

 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)