正则表达式 - 检测重复

时间:2012-08-29 18:43:28

标签: 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

我已经根据初步搜索将company_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 ...

非常感谢任何澄清!

3 个答案:

答案 0 :(得分:1)

我认为你想要的是

import re
regx = "([\w\s]+).*\1\s*gmbh"
re.findall(regx,my_target_text,re.MULTILINE)

无论如何都是这样的(我认为\ 1在正则表达式中捕获了第一个paren ......但那部分可能是错误的)

这听起来有点像家庭作业,因为你问的是使用正则表达式但是没有太多需要使用正则表达式

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

答案 1 :(得分:1)

算法

  1. (.*?)(\s+AG)?字符串中搜索正则表达式first_name,并将其替换为\1。这将为您提供没有AG的公司名称。
  2. 将结果分配给first_name_without_AG,然后执行以下操作:next_name == first_name_without_AG + ' gmbh'
  3. 示例实施

    import re
    first_name_without_AG = re.sub("(.*?)(\\s+AG)?", "\\1", first_name)
    next_name == first_name_without_AG + ' gmbh'
    

答案 2 :(得分:1)

他的例子有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 

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