0

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

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 分配给完全匹配的初步搜索将 company_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...

非常感谢任何澄清!

4

3 回答 3

1

算法

  1. (.*?)(\s+AG)?在字符串中搜索正则表达式first_name并将其替换为\1. 这将为您提供不带AG.
  2. 将结果分配给first_name_without_AG,然后执行以下操作:next_name == first_name_without_AG + ' gmbh'

示例实现

import re
first_name_without_AG = re.sub("(.*?)(\\s+AG)?", "\\1", first_name)
next_name == first_name_without_AG + ' gmbh'
于 2012-08-30T00:42:52.203 回答
1

我想你想要的是

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

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

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

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

于 2012-08-29T18:55:49.140 回答
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 

这仅检查引入的名字的长度,并且在检查中忽略后缀。

于 2012-08-30T01:11:19.217 回答