1 votes

RegEx pour la mise en correspondance de chaînes répétitives

Recherche de noms de produits et de descriptions de produits à partir d'un CSV pour filtrer les volts avec une expression rationnelle. Ce que j'essaie de faire, c'est de supprimer les valeurs en double de ma recherche. J'ai essayé set list etc. J'ai du mal à comprendre pourquoi je ne peux pas supprimer les mots en double de ma recherche. Je ne comprends pas comment set fonctionne, il semble diviser toutes les valeurs en caractères 1,2, , v,o,l,t ne peut-on pas simplement supprimer le mot en double entier dans found ? lorsque j'exécute le code j'obtiens :

12 Volt
12 Volt
40 Volt
2 Volt
18 Volt
18 Volt
240 Volt
240 Volt
110 Volt
110 Volt
110 Volt
36 Volt

Ce dont j'ai besoin et que j'ai du mal à obtenir, c'est une liste unique de valeurs, par exemple 12 volts, 40 volts, 18 volts, 240 volts, etc, etc.

def volts_search():
    with open('filters/volts_filter.csv', 'w') as headerOut:
        headerOut.write("name" + "," + "sort_order" + "," + "status" + "," + "image" + "," + "regex" + "," + "value" + "\n")

    with open(merchant_feed, 'r') as csv_filein, open('filters/volts_filter.csv', 'a') as fileOut:
        reader = csv.DictReader(csv_filein, delimiter=',', quotechar='"')
        for row in reader:
            program_name = clean_text(row['program_name'])
            product_name = clean_text(row['product_name'])
            product_description = clean_text(row['description'])
            merchant_category = clean_text(row['merchant_category'])
            product_id = row['product_id']
            product_brand = clean_text(row['brand'])

            filter_name = "Filter By Volts:"
            v = re.findall(r"((?i)(?:)\d+\.\d+v|\d+\.\d+ v|\d+ v|\d+v)", product_name + product_description)

            volt = re.findall(r"((?i)(?:)\d+volt|\d+ volt)", product_name + product_description)

            volts = re.findall(r"((?i)(?:)\d+\.\d+volts|\d+volts)", product_name + product_description)

            seen = set()
            for filter_search in volt:
                if filter_search in product_name + product_description:
                    if filter_search in seen: continue
                    seen.add(filter_search)

                    print(filter_search)

0voto

Emma Points 1

RegEx

Cette expression peut vous aider à supprimer vos entrées répétées dans votre fichier CSV en utilisant un remplacement de chaîne :

([\s\S]+)\1{1,} 

enter image description here

Graphique

Ce graphique montre comment cela fonctionnerait par rétro-référencement :

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X