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
的公司名称first\u name\u
,然后执行此操作:next\u name==不带\u AG的first\u name\u+'gmbh'
名字
字符串中搜索regex(.*)(\s+AG)
,并将其替换为\1
。这将为您提供不带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中使用它。谢谢你的帮助!谢谢你,伙计。在我上面的一个评论中,我也发现了类似的东西。谢谢你。在我上面的一个评论中,我也发现了类似的东西。