gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 16:29:41 24 4
gpt4 key购买 nike

我想删除出现在字符串末尾的术语。例如,LTDCORPLLCINC[总共有大约 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)

有没有比这更简单的方法而不需要递归?目前,每个字符串在不需要进一步调整之前往往需要通过正则表达式命令大约 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)

参见 IDEONE demo

正则表达式匹配

的 1 个或多个组 ( +)
  • 一个空间和一个替代组,包括
    • LTDCORPLLCINC 之前
  • $ - 字符串结尾。

我们的想法是,我们匹配位于字符串末尾之前的序列中的任何 space+keyword

关于python - 如何避免需要递归地使用正则表达式来删除字符串末尾的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33222577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com