kyr*_*nia 3 python regex recursion python-2.7
我想删除出现在字符串末尾的术语.例如LTD,CORP,LLC,INC.[总共有大约50个不同的术语我想从字符串末尾删除].
我的问题是如何删除这些术语的序列,例如使用字符串"COMPANY_NAME CORP LTD".在这种情况下,我想删除两个CORP和LTD[即一旦LTD被删除,这个词现在结束CORP,我也想要消失].
目前,我递归地执行此操作,一遍又一遍地运行正则表达式,直到它不再进行更改.
import re
def re_run_match(match_term, replace_with, string):
new_string_temp = re.subn(match_term, replace_with, string)
if new_string_temp[1] == 0:
return(new_string_temp[0])
else:
return(re_run_match(match_term, replace_with, new_string_temp[0]))
long_match_set = r" LTD$| CORP$| LLC$| INC$"
company_name = "COMPANY_NAME CORP LTD"
clean_company_name = re_run_match(long_match_set, "", company_name)
Run Code Online (Sandbox Code Playgroud)
在没有递归的情况下,有没有比这更简单的方法?目前,在没有进一步调整之前,每个字符串往往需要通过正则表达式命令大约2-3次,因此使代码比在单个操作中有一种方法慢2或3倍.
注意:我不想删除不在字符串末尾的术语,因此我不仅仅使用匹配术语,例如r"\bLTD\b|\bCORP\b|\bLLc\b|b\INC\b".
你可以通过分组和+量词实现它:
import re
long_match_set = r"(?: (?:LTD|CORP|LLC|INC))+$"
company_name = "COMPANY_NAME CORP LTD"
clean_company_name = re.sub(long_match_set, "", company_name)
print(clean_company_name)
Run Code Online (Sandbox Code Playgroud)
请参阅IDEONE演示
正则表达式匹配1个或多个组(+)
LTD或CORP或LLC或INC之前$ - 字符串结尾. 我们的想法是匹配字符串结尾之前的序列中的任何space+ keyword.