Python - Replace() 用于关键字列表

Adr*_*uno 1 python time loops replace for-loop

我有一个公司名称+商业首字母缩略词的列表,例如:

['Abc Inc','def Gmbh','ghi PLC', 'xhlm SA', 'sojs LLC'] and so on. 
Run Code Online (Sandbox Code Playgroud)

我想得到一个没有 PLC、INC、Gmbh 和每个类似首字母缩略词的干净列表。出于这个原因,我添加了一个 for 循环,它遍历首字母缩略词列表以将它们从公司名称中删除并替换为“”。

这就是我带来的,但会大大增加处理我的代码所需的时间。有什么更好的主意吗?

def ExtractNames():

substring_adjustment = ['AB', 'AB', 'B.V', 'B.v', 'BV', 'BV', 'GMBH', 'Gmbh', 'INC', 'INC.', 'Inc', 'Inc.', 'LTD', 'Ltd', 'NV', 'NV', 'P.L.C', 'P.L.C', 'PLC', 'Plc', 'SA', 'SE', 'SE', 'SPA', 'Sa', 'Spa', 'ab', 'b.v', 'bv', 'gmbh', 'inc', 'inc.', 'ltd', 'nv', 'p.l.c', 'plc', 'sa', 'se', 'spa',",",".","-"]  
Company_List= load_workbook(filename='Excel for Scraping.xlsx',data_only=True).active 

for row in Company_List.iter_rows (min_row=2,min_col=1,max_col=1,values_only=True): 
    value = row[0]
    for word in substr_adjust:
        value = value.replace(word,"")
        print(value)
Run Code Online (Sandbox Code Playgroud)

Jan*_*Jan 5

您可以加入替换并使用正则表达式:

import re
substring_adjustment = ['AB', 'AB', 'B.V', 'B.v', 'BV', 'BV', 'GMBH', 'Gmbh', 'INC', 'INC.', 'Inc', 'Inc.', 'LTD', 'Ltd', 'NV', 'NV', 'P.L.C', 'P.L.C', 'PLC', 'Plc', 'SA', 'SE', 'SE', 'SPA', 'Sa', 'Spa', 'ab', 'b.v', 'bv', 'gmbh', 'inc', 'inc.', 'ltd', 'nv', 'p.l.c', 'plc', 'sa', 'se', 'spa',",",".","-"]
lst = ['Abc Inc','def Gmbh','ghi PLC', 'xhlm SA', 'sojs LLC']

rx = re.compile(r'\s*(?:{})$'.format("|".join(substring_adjustment)))

new_list = [rx.sub('', item) for item in lst]
print(new_list)
# ['Abc', 'def', 'ghi', 'xhlm', 'sojs LL']
Run Code Online (Sandbox Code Playgroud)

如您所见,这种方法的问题在于您需要先放置较长的替换项。此外,您的替换列表中有重复项。
话虽如此,您可以将替换列表和正则表达式更改为:

import re

substring_adjustment = ['AB', 'B\.?V', 'GMBH', 'INC\.?', 'LTD', 'NV', 'P\.?L\.?C', 'S[AE]', 'SPA']
lst = ['Abc Inc', 'def Gmbh', 'ghi PLC', 'xhlm SA', 'sojs LLC', 'XXX Management Limited']

rx = re.compile(r'(?i)\s*\b(?:{})$'.format("|".join(substring_adjustment)))

new_list = [rx.sub('', item) for item in lst]
print(new_list)
Run Code Online (Sandbox Code Playgroud)

这为您的示例产生:

['Abc', 'def', 'ghi', 'xhlm', 'sojs LLC', 'XXX Management Limited']
Run Code Online (Sandbox Code Playgroud)