0
votes

Analyse du nom de la table de base de données à l'aide de Regex

J'ai des données qui contiennent le nom de la table de la base de données.

avec un code comme celui-ci:

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

les données sont comme ceci:

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


1 commentaires

Veuillez corriger votre indentation.


3 Réponses :


0
votes

Si vos seuls cas sont de supprimer public. et as x de vos entrées, vous pouvez utiliser

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


0 commentaires

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

1 commentaires

Salut. Vous devez également ajouter des explications avec votre réponse. Vous pouvez écrire sur l'erreur commise par OP ou ce qu'il / elle a manqué.



0
votes

Connaissez-vous l'ensemble des noms de table de base de données possibles attendus? On dirait que vous voudriez ou seriez en mesure de l'interroger à partir de la base de données. Si tel est le cas:

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)

Si vous ne le faites pas, votre solution ne sera aussi bonne que la prévisibilité des données entrantes à nettoyer. Avec l'ensemble, vous avez:

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)


0 commentaires