You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python正则表达式提取文本出现多余字符,求优化解决

修正方案

问题分析

你的原正则表达式因字符集包含逗号、括号等分隔符,且未排除(In Relation)这类不需要的后缀,导致匹配出多余的(, ,等无效内容。我们可以通过两种方式调整逻辑,得到符合预期的结果。


方案一:分割条目后清理后缀(简单直观)

先按逗号拆分每个公司条目,再单独去除每个条目末尾的(In Relation)后缀,保留合法的年份括号(如(2005)):

import re

def extract_name(title):
    # 按逗号分割并去除每个条目的前后空格
    companies = [comp.strip() for comp in title.split(',')]
    cleaned_companies = []
    for comp in companies:
        # 替换掉末尾的 (In Relation) 部分
        cleaned = re.sub(r'\s+\(In Relation\)$', '', comp)
        cleaned_companies.append(cleaned)
    return ', '.join(cleaned_companies) if cleaned_companies else None

测试验证:

test_input = "THETA COMMERCIALS (2005) LIMITED, TEST CONNECTIONS LTD (In Relation), NANO CARE LIMITED (In Relation)"
print(extract_name(test_input))
# 输出:THETA COMMERCIALS (2005) LIMITED, TEST CONNECTIONS LTD, NANO CARE LIMITED

方案二:精准正则一次性匹配

用正则直接匹配所有符合要求的公司名称,排除(In Relation)后缀,同时避免匹配分隔符:

import re

def extract_name(title):
    # 正则逻辑:匹配逗号后/开头的公司名称,排除末尾的(In Relation)
    pattern = r'(?<=,|^)\s*([A-Z0-9\s&.,()-]+?)(?=\s*\(In Relation\)(?:,|$)|,|$)'
    matches = re.findall(pattern, title)
    # 清理每个匹配结果的前后空格
    cleaned_matches = [match.strip() for match in matches]
    return ', '.join(cleaned_matches) if cleaned_matches else None

正则解释:

  • (?<=,|^):匹配位置在逗号之后或字符串开头
  • [A-Z0-9\s&.,()-]+?:非贪婪匹配公司主体内容(允许字母、数字、空格、&、.、,、()、-)
  • (?=\s*\(In Relation\)(?:,|$)|,|$):正向预查,确保后面是(In Relation)+逗号/结尾,或者直接是逗号/结尾,避免包含无效后缀

内容的提问来源于stack exchange,提问作者Totura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 13:12:39