如何避免需要递归使用正则表达式删除字符串末尾的单词?

kyr*_*nia 3 python regex recursion python-2.7

我想删除出现在字符串末尾的术语.例如LTD,CORP,LLC,INC.[总共有大约50个不同的术语我想从字符串末尾删除].

我的问题是如何删除这些术语的序列,例如使用字符串"COMPANY_NAME CORP LTD".在这种情况下,我想删除两个CORPLTD[即一旦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".

Wik*_*żew 5

你可以通过分组和+量词实现它:

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个或多个组(+)

  • 一个空间和一个替代组,包括
    • LTDCORPLLCINC之前
  • $ - 字符串结尾.

我们的想法是匹配字符串结尾之前的序列中的任何space+ keyword.