Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于匹配重复字符串的正则表达式_Python_Regex_Python 3.x - Fatal编程技术网

Python 用于匹配重复字符串的正则表达式

Python 用于匹配重复字符串的正则表达式,python,regex,python-3.x,Python,Regex,Python 3.x,使用regex搜索产品名称和产品描述crom CSV以查找过滤器电压我试图做的是从搜索中删除重复值。 我已经尝试过设置列表等,我很难理解为什么我不能从搜索中删除重复的单词。由于不了解集合是如何工作的,它似乎将所有值拆分为字符1、2、v、o、l、t。在find中不能删除整个重复的单词吗?当我运行代码时,我得到: 12 Volt 12 Volt 40 Volt 2 Volt 18 Volt 18 Volt 240 Volt 240 Volt 110 Volt 110 Volt 110 Volt 36

使用regex搜索产品名称和产品描述crom CSV以查找过滤器电压我试图做的是从搜索中删除重复值。 我已经尝试过设置列表等,我很难理解为什么我不能从搜索中删除重复的单词。由于不了解集合是如何工作的,它似乎将所有值拆分为字符1、2、v、o、l、t。在find中不能删除整个重复的单词吗?当我运行代码时,我得到:

12 Volt
12 Volt
40 Volt
2 Volt
18 Volt
18 Volt
240 Volt
240 Volt
110 Volt
110 Volt
110 Volt
36 Volt
我需要并努力实现的是一系列独特的数值,如12伏、40伏、18伏、240伏等

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)
正则表达式 可能有助于您使用字符串替换删除CSV文件中的重复输入:

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

图表 此图显示了通过反向引用它将如何工作:


另外,稍微增加一点上下文也会很有用。为什么不能使用集合?请使用按钮为您的问题添加其他信息。这比试图将其添加为注释要好。一个显示简短示例输入CSV文件和预期输出CSV的工作示例会很好。什么是
clean_text
?您可以提供一个实际与您的代码一起工作的CSV文件,或者将您的代码精简到与提供的CSV一起工作吗?后一个选项是非常首选的。clean_text是一个从CSV文件数据中删除不需要的字符的功能。我已上载了我的CSV文件: