Python中多条件移除括号内内容:列表元素处理结果不符合预期的解决方法
问题分析
你的代码出问题的核心原因是正则表达式的贪婪匹配特性:原正则\(.*\)会匹配从第一个左括号(到最后一个右括号)之间的所有内容,而非单个括号内的独立内容。拿最后一个元素举例:
Ex-factory price (low-end price): Triethanolamine (85% commercial grade): North
贪婪匹配会把(low-end price): Triethanolamine (85% commercial grade)整个片段全部删掉,直接导致Triethanolamine丢失,最终得到不符合预期的结果。另外原代码里的pat3是未定义的变量,这也是一个明显的笔误。
修改后的代码
我们需要做两个关键调整:
- 将括号匹配正则改为非贪婪模式:
\(.*?\),这样只会匹配每个独立括号内的内容,不会跨括号“过度匹配”。 - 清理冒号前后的多余空格,让最终格式和预期完全一致。
import re def remove_extra(content): # 匹配所有括号及内部内容(非贪婪模式,只匹配单个括号对) pat_parentheses = r'\(.*?\)' # 第一步:移除所有括号及内部内容 temp_content = re.sub(pat_parentheses, '', str(content)) # 第二步:清理冒号前后的多余空格,统一格式为「: 」(冒号后留一个空格) pat_space_colon = r'\s*:\s*' return re.sub(pat_space_colon, ': ', temp_content).strip() # 原始输入列表 l = ['hydrogenated benzene (purity: 99.9 density (g/cm3), produced in ZB): SD', 'Car board price (tax included): JT Port', 'Ex-factory price (low-end price): Triethanolamine (85% commercial grade): North' ] # 处理并输出结果 result = [remove_extra(item) for item in l] print(result)
运行结果
['hydrogenated benzene: SD', 'Car board price: JT Port', 'Ex-factory price: Triethanolamine: North']
完全符合你期望的输出格式。
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

