Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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_Csv - Fatal编程技术网

Python 正则表达式-检测重复项

Python 正则表达式-检测重复项,python,regex,csv,Python,Regex,Csv,我有一个包含以下数据类型的数据集: company_id, company_name, country 1, a Tech, germany 2, a Tech AG, germany 3, a Tech gmbh, germany 4, AF, germany 5, AF gmbh, vermany 我已经根据初步搜索将公司id分配给了这些公司,该搜索将id分配给了精确的匹配项。现在,我想做以下工作: 1) 编写一个正则表达式,查找一个公司名称是否与其下面的公司名称完全相同,但第二个公司名称

我有一个包含以下数据类型的数据集:

company_id, company_name, country
1, a Tech, germany
2, a Tech AG, germany
3, a Tech gmbh, germany
4, AF, germany
5, AF gmbh, vermany
我已经根据初步搜索将公司id分配给了这些公司,该搜索将id分配给了精确的匹配项。现在,我想做以下工作:

1) 编写一个正则表达式,查找一个公司名称是否与其下面的公司名称完全相同,但第二个公司名称的末尾有后缀“gmbh”

除了正确使用正则表达式背后的逻辑之外,我已经完成了所有工作。例如:

    for next_row in reader:
        first_name = first_row['company_name']
        next_name = next_row['company_name']

        if first_name == next_name:##FIX ME
            #do stuff
        writer.writerow(first_row)
        first_row = next_row
相等性测试的逻辑不应该是first_name==next_name——而是first_name等于last_name加上gmbh


如有任何澄清,将不胜感激

我想你想要的是

import re
regx = "([\w\s]+).*\1\s*gmbh"
re.findall(regx,my_target_text,re.MULTILINE)
无论如何都是这样的(我认为\1捕获了regex中的第一个paren…但这部分可能是错误的)

另外,这听起来有点像家庭作业,因为您正在询问如何使用regex,但不太需要使用regex


[编辑/注意]这绝不是一个完整的实现,可能需要对正则表达式进行重大调整。。。(但会很相似)

我想你想要的是

import re
regx = "([\w\s]+).*\1\s*gmbh"
re.findall(regx,my_target_text,re.MULTILINE)
无论如何都是这样的(我认为\1捕获了regex中的第一个paren…但这部分可能是错误的)

另外,这听起来有点像家庭作业,因为您正在询问如何使用regex,但不太需要使用regex

[编辑/注意]这绝不是一个完整的实现,可能需要对正则表达式进行重大调整。。。(但将是类似的)

算法
  • 名字
    字符串中搜索regex
    (.*)(\s+AG)
    ,并将其替换为
    \1
    。这将为您提供不带
    AG
    的公司名称
  • 将结果分配给不带\u AG的
    first\u name\u
    ,然后执行此操作:
    next\u name==不带\u AG的first\u name\u+'gmbh'
  • 示例实现 算法
  • 名字
    字符串中搜索regex
    (.*)(\s+AG)
    ,并将其替换为
    \1
    。这将为您提供不带
    AG
    的公司名称
  • 将结果分配给不带\u AG的
    first\u name\u
    ,然后执行此操作:
    next\u name==不带\u AG的first\u name\u+'gmbh'
  • 示例实现
    他的例子既有AG又有gmhb

    为什么不试试这样的东西呢

    for next_row in reader:
        first_name = first_row['company_name']
        next_name = next_row['company_name']
        checkLength = len(first_name)
    
        if first_name == next_name[:checkLength] :  ##FIX ME
            #do stuff
        writer.writerow(first_row)
        first_row = next_row 
    

    这只检查输入的第一个名字的长度,在检查中忽略后缀。

    他的示例同时包含AG和gmhb

    为什么不试试这样的东西呢

    for next_row in reader:
        first_name = first_row['company_name']
        next_name = next_row['company_name']
        checkLength = len(first_name)
    
        if first_name == next_name[:checkLength] :  ##FIX ME
            #do stuff
        writer.writerow(first_row)
        first_row = next_row 
    

    这只检查引入的名字的长度,检查中忽略后缀。

    next\u name==first\u name+'gmbh'
    ?您是否尝试将
    first\u name
    (next\u name+'gmbh')
    进行比较?这是家庭作业吗?既然你说正则表达式。。。但这不需要正则表达式吗?@Eric,我的错是使用了一个坏例子。如果next_name在大多数情况下与first_name plus gmbh相等,那就好了。但更常见的是这样的:公司1:AbegAG。公司2:aBeg GmbH.有没有一种简单的方法来减去“AG”?我不能假设AG前面的空格前只有一个单词,因为有时候AG前面有2、3个或更多的单词……我不明白你在说什么。您是否希望
    aBeg AG
    后接
    aBeg GmbH
    next\u name==first\u name+'GmbH'
    ?您是否尝试将
    first\u name
    (next\u name+'GmbH')
    进行比较?这是家庭作业吗?既然你说正则表达式。。。但这不需要正则表达式吗?@Eric,我的错是使用了一个坏例子。如果next_name在大多数情况下与first_name plus gmbh相等,那就好了。但更常见的是这样的:公司1:AbegAG。公司2:aBeg GmbH.有没有一种简单的方法来减去“AG”?我不能假设AG前面的空格前只有一个单词,因为有时候AG前面有2、3个或更多的单词……我不明白你在说什么。您是否希望
    aBeg AG
    后接
    aBeg GmbH
    的条件返回true?不是作业。对于工作,帮助我避免了很多手动删除重复项的不愉快。正则表达式在这里并不重要,但了解如何在python中使用正则表达式很有趣。我以前在R中使用过它,这很容易,但还没有机会在Python中使用它。谢谢你的帮助!不是家庭作业。对于工作,帮助我避免了很多手动删除重复项的不愉快。正则表达式在这里并不重要,但了解如何在python中使用正则表达式很有趣。我以前在R中使用过它,这很容易,但还没有机会在Python中使用它。谢谢你的帮助!谢谢你,伙计。在我上面的一个评论中,我也发现了类似的东西。谢谢你。在我上面的一个评论中,我也发现了类似的东西。