Python正则表达式求助:如何排除"(trading as"之后的文本?
解决Python正则排除"(trading as)"后续内容的问题
问题说明
需要从目标文本中提取公司名称,核心要求是彻底排除"(trading as"及之后的所有内容,同时保留带年份括号(如(2005))、清算状态括号(如(in liquidation))的合法公司名。
修改后的代码实现
import re def extract_company_name(title): # 按逗号分割每个独立的公司条目 company_items = [item.strip() for item in title.split(',')] result = [] for item in company_items: # 截断"(trading as"及之后的所有内容 cleaned_item = re.split(r'\s*\(trading as', item)[0] # 匹配符合格式的公司名(保留带数字的括号结构) match = re.search(r'\b[A-Z0-9-](?:[A-Z0-9 \t&.-](?:\s*\(\d+\))?)*(?:\b|(?<=\)))', cleaned_item) if match: result.append(match.group().strip()) return ','.join(result) if result else None text = """TEST LIMITED (trading as FOO Limited) (in relation), TEST (2005) LTD, WINDING LIMITED (in liquidation)""" print(extract_company_name(text))
代码逻辑说明
- 分割条目:用逗号拆分输入文本,确保每个公司项独立处理,避免跨条目匹配错误。
- 清理无关内容:通过
re.split以\s*\(trading as为分隔符,直接截断并保留分隔符前的有效内容,彻底排除trading as相关的冗余信息。 - 匹配合法名称:沿用原正则的匹配规则,确保保留带年份数字的括号结构,同时过滤清理后可能残留的无效字符。
运行结果
输出:TEST LIMITED, TEST (2005) LTD, WINDING LIMITED
内容的提问来源于stack exchange,提问作者Totura
相关产品推荐
相关产品推荐

