如何修改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))
原代码问题分析
你的现有正则存在两个核心问题:
\(\d\)只能匹配单个数字的括号,无法匹配(2005)这类多位数年份- 正则字符类
[A-Z0-9\s&.,()-]+会把(In Relation)也包含进匹配结果,自然无法移除
内容的提问来源于stack exchange,提问作者Minh Trần Quang
相关产品推荐
相关产品推荐

