我有一个包含以下数据的数据集:
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 ...
非常感谢任何澄清!
答案 0 :(得分:1)
我认为你想要的是
import re
regx = "([\w\s]+).*\1\s*gmbh"
re.findall(regx,my_target_text,re.MULTILINE)
无论如何都是这样的(我认为\ 1在正则表达式中捕获了第一个paren ......但那部分可能是错误的)
这听起来有点像家庭作业,因为你问的是使用正则表达式但是没有太多需要使用正则表达式
[编辑/注释]这绝不是一个完整的实现,可能需要对正则表达式进行重大调整...(但它将是类比)
答案 1 :(得分:1)
(.*?)(\s+AG)?
字符串中搜索正则表达式first_name
,并将其替换为\1
。这将为您提供没有AG
的公司名称。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'
答案 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
这只检查引入的第一个名字的长度,并在检查中忽略后缀。