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

如何修改Python正则表达式,保留指定内容并排除(In Relation)

最优实现方案:两种思路可选

思路一:正则一次性处理(简洁高效)

直接用正则替换掉所有不需要的括号项,再统一格式即可。核心是精准匹配并移除(In Relation)这类非数字内容的括号,同时保留(2005)这类年份括号。

代码示例:

import re

def extract_name(title):
    # 移除所有非数字内容的括号项(含括号前的空格)
    cleaned = re.sub(r'\s*\((?!\d+\))[^)]+\)', '', title)
    # 统一逗号分隔格式,去除首尾空格
    cleaned = re.sub(r'\s*,\s*', ', ', cleaned).strip()
    return cleaned if cleaned else None

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

正则说明:

  • \s*\((?!\d+\)):匹配括号前的可选空格,且括号内不是纯数字序列(排除年份括号)
  • [^)]+:匹配括号内的所有非右括号内容
  • 后续的re.sub(r'\s*,\s*', ', ', cleaned)是为了处理可能出现的多余空格或不规范的逗号分隔

思路二:拆分后逐项处理(灵活易扩展)

先按, 拆分每个公司条目,再对单个条目清理不需要的内容,最后合并。这种方式更适合后续需要对每个公司名称单独加规则的场景。

代码示例:

import re

def extract_name(title):
    # 拆分每个公司项
    company_items = title.split(', ')
    cleaned_items = []
    for item in company_items:
        # 移除当前项中的非数字括号项
        cleaned_item = re.sub(r'\s*\((?!\d+\))[^)]+\)', '', item).strip()
        if cleaned_item:
            cleaned_items.append(cleaned_item)
    # 合并为规范格式
    return ', '.join(cleaned_items) if cleaned_items else None

title = "THETA COMMERCIALS (2005) LIMITED, TEST CONNECTIONS LTD (In Relation)"
print(extract_name(title))

原代码问题分析

你的现有正则存在两个核心问题:

  1. \(\d\)只能匹配单个数字的括号,无法匹配(2005)这类多位数年份
  2. 正则字符类[A-Z0-9\s&.,()-]+会把(In Relation)也包含进匹配结果,自然无法移除

内容的提问来源于stack exchange,提问作者Minh Trần Quang

相关产品推荐
方舟 Agent Plan

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

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